1

CGContextパス描画コマンドを使用してUIImageView描画と線描画を混在させようとしていますが、描画順序が正しくありません。画像の上にパスを描く必要がありますが、逆になります。

私がそれを実装した方法:

  1. UIImageView内でUIImageを設定し、UIImageViewをメインビューのサブビューとして追加します。
  2. 次に、「drawRect」(描画の更新関数)を使用して、UIKitCGContextStrokePath関数を使用してパスを描画します。

さて、コンテキスト画像描画機能を直接使用する以外に(複数のUIImageViewで画像リソースを再利用するため、これを避けたい)、順序を正しく設定する方法はありますか(フラグが設定されている可能性があります)?

ここでも問題は、線/パスがUIImageViews(親UIViewへの接続を介して自動的に描画される)の前に描画されるため、画像/UIImageViews上に表示されないことです。

ありがとう

4

2 に答える 2

3

一番上の (この場合は最後に追加された) サブビューの内容は、他のすべてのビューの前に表示されます。画像サブビューを追加してその親ビューに描画すると、その親ビューで行うすべての描画の前に画像が表示されます。

UIImageView を追加した後にのみ、メイン ビューに追加する新しいビューに描画する必要があります。

必要に応じて、 と を使用bringSubviewToFront:sendSubviewToBack:てビューを手動で並べ替えることもできます。

(あなたの投稿から、どのビューに描画しているかは不明ですが、この動作を説明するメインの親ビューに描画していると思います。)

于 2009-06-08T07:43:15.117 に答える
3

レイヤーを使用して Quartz Core を介してこれを実装することができます (CALayer クラスのドキュメントを参照してください)。基本的に、レイヤー階層を持つことができます。各 UIView を異なるレイヤーに関連付けると、レイヤーが一緒にレンダリングされ、単一の複合レイヤーが提供されます。さらに、レイヤーに変換とアニメーションを適用することもできます。

QuartzCore ヘッダーをインポートして、次のようにする必要があります

#import <QuartzCore/QuartzCore.h>
UIView *mainView = [[UIView alloc] initWithFrame...
UIImageView *imageView = ...

CaLayer *mainViewLayer = mainView.layer;
[mainViewLayer addSubLayer: imageView.layer];

次に、mainView が画面に表示されると、すべてのサブレイヤーが結合され、画面にレンダリングされます。何が起こるかというと、各ビューがそのレイヤーをレンダリングし、mainViewLayer がレンダリングされて 2 つのレイヤーがマージされます。

これがうまくいくかどうか教えてください。

好きなだけレイヤーを持つことができます。CALayer メソッドを使用して、任意の階層を作成できます。

– addSublayer: 
– removeFromSuperlayer
– insertSublayer:atIndex:
– insertSublayer:below:
– insertSublayer:above:
– replaceSublayer:with:
于 2009-06-08T13:13:11.753 に答える