0

drawRect メソッドで描画する UIView があります。drawRect で描画するもののサブセットを描画する UIView CALayer (self.layer) の上に CALayer をオーバーレイしたいと思います。基本的に、drawRect でたくさんの円を描きますが、オーバーレイでいくつかの円をハイライトしたいと思います。UIView のプロパティであるモデル オブジェクトから円の座標を取得します。

私の最初の試みは、サブレイヤーsを UIView レイヤーに追加し、そのデリゲートを UIView に設定し、setNeedsDisplay必要に応じてそのメソッド を呼び出すことでしたdrawLayer:InContextが、両方のレイヤー (sおよび self.layer) によって呼び出されます。これは機能しません:

-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
    if (layer == s ) {
    // draw stuffs for s
    }
    else if (layer==self.layer) {
    // do nothing
    }
}

黒の UIView になります。sデータモデルにアクセスできる場所と、描画に役立つその他の変数 (線の幅..)から描画したいと思います。の描画をs別のオブジェクトに移動することで問題を解決しましたが、これにより、このオブジェクトにモデルのポインターも設定し、他のパラメーターもコピーする必要があります。

だから私の質問は: drawRect を使用してコンテンツを描画する UIView で、デリゲートが同じ UIView であるサブレイヤーを追加する方法は?

4

1 に答える 1

1

+ (Class)layerClassUIView をサブクラス化し、そのサブクラスで独自の CALayer サブクラスでオーバーライドする必要があります。次に、その UIView は、バッキング レイヤーを作成するときにそのサブクラスを使用します。CALayer サブクラスには、 のオーバーライドがありますdrawLayer

この CALayer サブクラス (インターフェイスと実装) を UIView サブクラスに配置できます。

于 2013-06-19T22:34:48.077 に答える