0

コードを使用しています

NSArray *buttons = [NSArray arrayWithObjects: self.rollBtn,nil];        
for(UIButton *btn in buttons)
{       
    btn.layer.shadowRadius = 3.0;
    btn.layer.shadowOffset = CGSizeMake(-2.0, -3.0);
    btn.layer.shadowOpacity = 0.5;
    btn.layer.shadowColor = [UIColor blackColor].CGColor;
    CAGradientLayer *btnGradient = [CAGradientLayer layer];
    btnGradient.frame = btn.bounds;
    btnGradient.colors = [NSArray arrayWithObjects:
                          (id)[[UIColor colorWithRed:102.0f / 255.0f green:102.0f / 255.0f blue:102.0f / 255.0f alpha:1.0f] CGColor],
                          (id)[[UIColor colorWithRed:51.0f / 255.0f green:51.0f / 255.0f blue:51.0f / 255.0f alpha:1.0f] CGColor],
                          nil];

    [btn.layer insertSublayer:btnGradient atIndex:0];            
}

しかし、私が得るのはドロップシャドウ付きのボタンだけです。クォーツコアライブラリをリンクし、インポートし、ボタンをリンクし、さまざまな種類のボタンを使用してみました。私は困惑しています。何がうまくいかないのですか?前もって感謝します。

4

3 に答える 3

1

私は同じ問題に直面しました。私と同じようにiOS6用にビルドしているようです。iOS6 で導入されたストーリーボードの自動レイアウトがこのような問題を引き起こしていることがわかりました。この機能を使用しない場合は、無効にしてください。

  1. Xcode でストーリーボードを開く
  2. ストーリーボードのプロパティを開く (プロパティのある右側のペイン)
  3. 「Interface Builder Document」セクションの「Use Autolayout」のチェックを外します。
于 2012-11-13T20:34:15.683 に答える
0

グラデーションの場所と始点/終点を設定してみましたか?

btnGradient.locations  = @[@(0.), @(1.)];
btnGradient.startPoint = (CGPoint){0., 0.};
btnGradient.endPoint   = (CGPoint){0., 1.};
于 2012-10-28T09:13:32.787 に答える
0

CAGradientLayerボタンに以前存在していたものを削除しようとすることができると思います:

for(CALayer* layer in btn.layer.sublayers)
    if ([layer isKindOfClass:[CAGradientLayer class]])
        [layer removeFromSuperlayer];

独自のものを追加します。

于 2012-10-28T09:17:41.473 に答える