2012-10-20 63 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]; 
    } 
}