2009-06-08 23 views
1

CGContextパス描画コマンドを使用してUIImageView描画と線描画を混在させようとしていますが描画順序が正しくありません。 画像の上にパスを描画する必要がありますが、その逆を取得します。 UIImageView以内にUIImageを設定し、メインビューのサブビューとしてUIImageViewを添加Objective-Cの表示順序を設定する方法

  1. 私はそれを実装方法。

  2. 次は、UIKit CGContextStrokePath関数を使用してパスを描画するために 'drawRect'(リフレッシュ描画関数)を使用します。

ここで、Context画像描画関数を直接使用する以外は、画像リソースをいくつかのUIImageViewsで再利用するため、避けたいのですが、正しく設定する方法がありますか?

問題は、UIImageViews(親UIViewへの接続を介して自動的に描画される)の前にlines/pathが描画されるため、images/UIImageViews上には表示されません。

おかげ

答えて

3

あなたはクォーツコアを介してこれを実装してみてくださいレイヤーを使用します(CALayerクラスのドキュメントを参照)。基本的には、レイヤの階層を持つことができます。各UIViewを別のレイヤーに関連付けると、レイヤーが一緒にレンダリングされ、単一の複合レイヤーが提供されます。また、レイヤーにトランスフォームやアニメーションを適用することもできます。 MAINVIEWが画面に表示されたときあなたはQuartzCoreヘッダをインポートし、その後

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

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

のような何かをする必要があり

は、すべてのサブレイヤをマージし、画面に描画されています。 mainViewLayerは2つのレイヤーをマージしてレンダリングされるのに対し、各ビューはレイヤーをレンダリングします。

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

好きなだけ多くのレイヤーを配置できます。

– addSublayer: 
– removeFromSuperlayer 
– insertSublayer:atIndex: 
– insertSublayer:below: 
– insertSublayer:above: 
– replaceSublayer:with: 
3

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

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

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

(あなたのポストから、それはあなたがに描画しているどのビューは不明だが、私はあなたがこの動作を説明するだろうというメイン親ビューに描画していると仮定します。)

+0

ご注文ありがとうございます(ToFront/ToBack)。CALayerメソッドを使用して任意の階層を作成できます。 私はまだ線/パスがUIImageViewの前に描画されているため、その場所では表示されないという事実に固執しています – Adi

関連する問題