3

ビュー コントローラー内にカスタム スタイルの UIButton があります。これは、UIButton を CAGradientLayer でカスタマイズし、角を丸め、レイヤーの周りに境界線を追加することによって実現されます。 グラデーションボタン

これらのボタンのルック アンド フィールが気に入っています。また、事前にレンダリングされた画像を使用しなくても、非常に簡単に実現できます。しかし、私には 1 つの問題があります。このようなボタンは、UIButton のようにタッチに反応しません。たとえば、典型的な角丸長方形のボタンは、タップすると青く強調表示されますが、私のボタンはそうではありません。

CAGradientLayer以下のコードに従って UIButton でカスタム背景を使用している場合、「タッチ ハイライト ボタン」動作を実現するにはどうすればよいですか?

ご意見ありがとうございます。

+(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

2 に答える 2

4

UIButton をサブクラス化すると、setHighlightedメソッドをオーバーライドできます。ここで、ボタンに別のグラデーションを設定したり、背景色を変更したりできます。

- (void)setHighlighted:(BOOL)highlighted {
    [super setHighlighted:highlighted];
    // Update the looks of the button
}
于 2012-10-20T17:49:24.423 に答える
0

コード内の for ループはエラーをスローします。

このようにレイヤーを逆方向にループする必要があります

NSEnumerator *enumerator = [btn.layer.sublayers reverseObjectEnumerator];
for(CALayer *layer in enumerator) {
    if ([layer isKindOfClass:[CAGradientLayer class]])
    {
        [layer removeFromSuperlayer];
    }
}
于 2014-07-10T16:12:07.310 に答える