0

Quartzを使用して派手なUIButtonを描画しようとしています。私は次のように自分のボタンクラスを宣言しました:

@interface MyButton : UIButton
@end

.mファイルで、ボタンを作成しています。

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        // Initialization code
        CALayer *buttonLayer = self.layer;
        buttonLayer.masksToBounds = YES;

        CALayer *customDrawn = [CALayer layer];
        customDrawn.delegate = self;
        customDrawn.masksToBounds = YES;
        [buttonLayer insertSublayer:customDrawn atIndex:0];
        [customDrawn setNeedsDisplay];
    }
    return self;
}

しかし、これはある種の再帰をもたらし、最終的にはで失敗しますEXC_BAD_ACCESS

メソッドを実装しましたdrawLayer: inContext:が、それでもクラッシュします。クラッシュを回避する唯一の方法は、デリゲートの割り当てを削除することですが、実装したいカスタム描画を実行できません。

どうすればこれを機能させることができますか?

4

1 に答える 1

0

Kurt Revisが言及した質問で説明されているように、UIView(UIButtonなど)をサブレイヤーのデリゲートとして使用することはできません。(これはすでにUIViewの「メイン」レイヤーのデリゲートであり、別のレイヤーのデリゲートとして使用することはできません。)解決策は、別のオブジェクトをデリゲートとして使用することです。メソッドを実装しdrawLayer: inContext:ます。

于 2012-06-06T19:34:17.840 に答える