突出显示时如何从 UIButton 中删除 CAGradientLayer

How to remove CAGradientLayer from UIButton when it's highlighted

我为我的 Button 添加了渐变效果,并将其作为子层添加到我的 Button

代码为:

CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = self.myButton.layer.bounds;
gradientLayer.colors = [NSArray arrayWithObjects:  (id)[[UIColor whiteColor] colorWithAlphaComponent:0.5].CGColor,(id) colorTwo.CGColor,(id) colorThree.CGColor,(id) colorFour.CGColor, nil];
gradientLayer.locations = [NSArray arrayWithObjects: [NSNumber numberWithFloat:0.0f], [NSNumber numberWithFloat:1.0f], nil];
self.myButton.layer.cornerRadius = 5;
gradientLayer.cornerRadius = self.myButton.layer.cornerRadius;
[self.myButton.layer addSublayer:gradientLayer];

现在,当我的按钮高亮显示(调用 touchedDown 方法)时,我想为 myButton 设置新的渐变。因此,我需要在单击 myButton 时删除旧的渐变效果并添加新的渐变。

如何去除旧的渐变效果?

我试过了

for (CALayer *layer in [self.loginScreenView.btnPowerBroking.layer.sublayers copy]){
        if ([[layer name] isEqualToString:@"gradientLayer"]) {
            NSLog(@"Gradient layer found.");
        }
    }

但我无法获取它的渐变图层。

感谢您的宝贵时间。 (:

您尚未将 name 属性 设置为您的 gradientLayer 对象,只需设置它即可。

 gradientLayer.name = @"gradientLayer";
 [self.myButton.layer addSublayer:gradientLayer];

在 for 循环的 if statement 中使用此 [layer removeFromSuperlayer];

删除层

注意: 您正在 myButton 对象中添加层以在 btnPowerBroking 中搜索并正确检查,您需要在按钮中搜索您已添加 Layer.

试试这个方法...

[self.myButton.layer replaceSublayer:oldgradientLayer with:newgradientLayer];