34

ここに UIButton があり、画像の下の背景 (背景が透明なシンボル) としてグラデーションを使用したいのですが、2 つの異なる問題に直面しています。

最初の CAGradientLayer は、どのように追加しようとしても画像の上に重なっているように見え、画像を完全に覆い隠します。

第二に、ボタンが無効になっているように、グラデーション自体がかなり暗くなっているように見えますが、そうではありません。

これが私のコードです:

self.backButton = [[UIButton alloc] initWithFrame:CGRectMake(15, 35, 28, 28)];
[backButton addTarget:self
               action:@selector(goBack)
     forControlEvents:UIControlEventTouchUpInside];
[backButton setBackgroundColor:[UIColor clearColor]];
CAGradientLayer *buttonGradient = [CAGradientLayer layer];
buttonGradient.frame = backButton.bounds;
buttonGradient.colors = [NSArray arrayWithObjects:
                         (id)[[UIColor colorWithRed:.0
                                              green:.166
                                               blue:.255
                                              alpha:1] CGColor], 
                         (id)[[UIColor colorWithRed:.0
                                              green:.113
                                               blue:.255
                                              alpha:1] CGColor], 
                         nil];
[buttonGradient setCornerRadius:backButton.frame.size.width / 2];
[backButton.layer insertSublayer:buttonGradient
                         atIndex:0];
[backButton setImage:[UIImage imageNamed:@"backarrow.png"]
            forState:UIControlStateNormal];
[backButton setEnabled:NO];
[topbarView addSubview:backButton];
4

4 に答える 4

80

そのため、グラデーションを追加した後に [button BringSubviewToFront:button.imageView] を実行することで、これを回避することができました。私が何をしても、新しいレイヤーがimageViewの上に追加されるように見えるので、後でそれを前面にプッシュする必要があります。

目的 C:

[button bringSubviewToFront:button.imageView] 

スウィフト 4.1:

button.bringSubview(toFront:button.imageView!)
于 2011-11-24T17:59:00.087 に答える
33

または、画像ビューのレイヤーの下にグラデーションレイヤーを挿入できます

CAGradientLayer* gradient = [CAGradientLayer layer];
// ...
[button.layer insertSublayer:gradient below:button.imageView.layer];
于 2014-10-08T22:02:51.630 に答える
5

スイフト3

ここに例があります:(ニールの回答に基づく)

    let layer = CAGradientLayer()
    layer.frame = CGRect(x: 0, y: 0, width: myButtonOutlet.layer.frame.size.width, height: myButtonOutlet..layer.frame.size.height)
    layer.colors = [UIColor.white.cgColor, pixelColorReceta.cgColor]
    layer.masksToBounds = true
    layer.cornerRadius = myButtonOutlet.layer.cornerRadius
    myButtonOutlet.layer.insertSublayer(layer, below: myButtonOutlet..imageView?.layer)

ハッピーコーディング:)

于 2016-11-10T19:45:27.883 に答える
0

スイフト3

グラデーションの上に画像を移動できます。

button.imageView?.layer.zPosition = 1

または、画像の下にグラデーションを挿入します。

button.layer.insertSublayer(gradientLayer, below: button.imageView?.layer)
于 2017-07-25T16:41:55.743 に答える