【问题标题】:How to remove CAGradientLayer from UIButton when it's highlighted突出显示时如何从 UIButton 中删除 CAGradientLayer
【发布时间】:2016-09-28 11:39:42
【问题描述】:

我为我的按钮添加了渐变效果,并将其作为子层添加到我的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.");
        }
    }

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

感谢您的宝贵时间。 (:

【问题讨论】:

  • 感谢您的编辑。我忘了注意问题中的这些小事情。在问下一个问题时,我会记住这些。 (:

标签: ios objective-c uibutton cagradientlayer


【解决方案1】:

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

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

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

注意:您在myButton 对象中添加层,在btnPowerBroking 中搜索也正确检查,您需要在添加Layer 的按钮中搜索。 p>

【讨论】:

    【解决方案2】:

    试试这个方法……

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 2014-02-03
      • 2020-11-12
      • 1970-01-01
      • 2017-05-15
      • 2017-05-20
      • 2021-07-16
      相关资源
      最近更新 更多