2

次のように、iOS5 アプリ用にいくつかの CGLayer を作成しています。

layer_1 = CGLayerCreateWithContext (context,self.bounds.size, NULL);    
offlineContext_1 = CGLayerGetContext (layer_1);
layer_2 = CGLayerCreateWithContext (context,self.bounds.size, NULL);    
offlineContext_2 = CGLayerGetContext (layer_2);
layer_3 = CGLayerCreateWithContext (context,self.bounds.size, NULL);    
offlineContext_3 = CGLayerGetContext (layer_3);

タイマーの各ステップで、offline_contexts に描画し、すべての描画が完了したら、次のように呼び出してすべてのレイヤーを 1 つに収集します。

CGContextDrawLayerAtPoint (context, CGPointZero, layer_1);
CGContextDrawLayerAtPoint (context, CGPointZero, layer_2);
CGContextDrawLayerAtPoint (context, CGPointZero, layer_3);

これはうまくいきます。レイヤー 1 のコンテンツはレイヤー 2 のコンテンツによって上書きされたように見え、次にレイヤー 3 が最初の 2 つのレイヤーを上書きします。すべての描画は、次のような呼び出しを使用して行われます。

    CGContextAddArc(context,cx,cy,radius,-fromDir,toDir,1-curve);

パフォーマンス上の理由から、結果が同じになるように、上記のような繰り返し描画コマンドの多くを画像に置き換えましたが、CGContextAddArc() を 20 回描画する代わりに、画像自体に 20 回描画するように指示します。

[myArcImage drawAtPoint: loc];

ただし、その 1 つの変更で、オーバーレイの順序が変更されたようです。画像は最終的に集合ビューに描画されますが、他のコンテキストに描画された他の線や円弧に重ならない画像の部分のみが描画されます。drawAtPoint バリアントでブレンディングを使用して遊んでみましたが、それは表示されている画像の部分にのみ影響します。

線と円弧が他のレイヤーのコンテンツをオーバーレイするのに、画像がオーバーレイしない理由についてのアイデアはありますか?

どうもありがとう

4

1 に答える 1

1

OK、私が何をしていたかがわかりました。私が描いていた円弧と線は、上記の CGContextAddArc() 呼び出しに似ていて、その呼び出しは、描画するコンテキストをパラメーターとして受け取ります。イメージの描画に切り替えたとき、drawAtPoint() メソッドはコンテキストを引数として取りません。代わりに、現在のコンテキスト (私の場合は現在の UIView のコンテキスト) に画像を描画します。

私の問題の解決策は、drawAtPoint 呼び出しをプッシュ/ポップ コンテキスト呼び出しでラップすることです。

UIGraphicsPushContext(correct_context);
[myArcImage drawAtPoint: loc];
UIGraphicsPopContext();
于 2012-06-08T18:26:41.943 に答える