2012-10-20 108 views
3

我在我的视图控制器中有一个自定义样式的UIButton,它是通过使用CAGradientLayer自定义UIButton,四舍五入并在图层周围添加边框来实现的。 Gradient buttoniPhone iOS自定义UIButton与CAGradientLayer,如何使它显示触摸?

我喜欢这些按钮的外观和感觉,而且它们非常容易实现,而无需使用预先呈现的图像。但我有一个问题 - 这样的按钮不响应触摸UIButton的方式。例如,一个典型的圆角矩形按钮会在点击时突出显示蓝色,但我的按钮不会。

如果我按照下面的代码在UIButton上使用自定义CAGradientLayer背景,我该如何实现“触摸高亮按钮”行为?

谢谢您的输入!

+(void)addLinearGradientToView:(UIView*)view TopColor:(UIColor*)topColor BottomColor:(UIColor*)bottomColor 
{ 
    for(CALayer* layer in view.layer.sublayers) 
    { 
     if ([layer isKindOfClass:[CAGradientLayer class]]) 
     { 
      [layer removeFromSuperlayer]; 
     } 
    } 
    CAGradientLayer* gradientLayer = [CAGradientLayer layer]; 
    //top down gradient 
    gradientLayer.startPoint = CGPointMake(0.5, 0); 
    gradientLayer.endPoint = CGPointMake(0.5,1); 
    gradientLayer.frame = view.bounds; 



    gradientLayer.colors = [NSArray arrayWithObjects:(id)[topColor CGColor], (id)[bottomColor CGColor], nil]; 

    [view.layer insertSublayer:gradientLayer atIndex:0]; 

} 

回答

4

如果您继承UIButton,则可以覆盖setHighlighted方法。在这里,您可以在按钮上设置不同的渐变,或更改背景颜色。

- (void)setHighlighted:(BOOL)highlighted { 
    [super setHighlighted:highlighted]; 
    // Update the looks of the button 
} 
0

代码中的for循环会引发错误。

你应该通过层层向后这样

NSEnumerator *enumerator = [btn.layer.sublayers reverseObjectEnumerator]; 
for(CALayer *layer in enumerator) { 
    if ([layer isKindOfClass:[CAGradientLayer class]]) 
    { 
     [layer removeFromSuperlayer]; 
    } 
}