如何突出显示UIButton中的CAGradientLayer

时间:2016-09-28 11:39:43

标签: ios objective-c uibutton cagradientlayer

我为我的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];

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

如何删除旧的渐变效果?

我试过

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

但我无法获得它的渐变层。

感谢您的时间。 (:

2 个答案:

答案 0 :(得分:2)

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

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

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

删除图层

注意:您正在myButton对象中添加图层以正确搜索btnPowerBroking内部的内容,您还需要在已添加{{}的按钮中搜索1}}。

答案 1 :(得分:0)

尝试这种方法......

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