2013-10-21 9 views
5

私は、子ビューの束を保持するコンテナビューを作成しました - コレクションビュー、カスタムツールバー、いくつかのビットとピース。subRow上のdrawRect?

デザインの上端、左端、右端には境界線がありますが、下端には境界線がありません。境界線を含むようにdrawRectをオーバーライドします。

私がツールバーを追加したとき、私はそれがボーダーの上に現れることに気付きました。 (何らかの理由で私は当初はそれが当然ではないと考えていました!)。

私はdrawRectに私のサブビューの上に描画すると言うことができますか?もちろん

私の問題を解決するための他の方法の負荷(例えば、ツールバーのフレームを調整する)しかし、私は合成やビューに関連する作品を描く方法の深い理解を得るために、この質問を求めているがあります階層。

+0

「zIndex」の使用を検討してください – onmyway133

答えて

5

描画はUIViewのすべてのサブビューの下で行われます。それをあなたのビューの実際の部分である底辺にあるものと考えてください。そして、各サブビューがビューの上に追加されます。サブビューの上に図面を作成することは、サブビューがサブビューのままで、ビューの下に表示されるようにすることと同じです。おそらく、その類推によって、なぜそれが常に底になければならないのかがより明確になるでしょう。また、論理的にソリューションにつながります。

サブビューの上に表示されるようにするには、新しいUIViewサブクラスを作成して描画コードを内部に配置し、これを他のすべてのサブビューの上に配置します。

サブビューが常に上になるように、UIViewのaddSubview:の実装を上書きすることもお勧めします。

+0

ありがとうございました。振り返るとクレイジーな質問。もちろん、図面はビュー階層に従わなければなりません。それ以外に何ができますか? –

2

drawRectが最初にビューのために呼び出され、drawRectが描画を終了した時点で描画を行うために、サブビューのためにdrawRectが呼び出されるため、できないと思います。たぶん、あなたが必要とするボーダーがあり、どこにいても透過的である、そのビューの上に別のサブビューを作成するのでしょうか?

2

サブビューはdrawn on top of their super viewsです。あなたの質問に対する答えは「いいえ」です。

コンテナビューに枠線を描画するとき、Cocoaはまだツールバーの描画を開始していません。

私は、境界線の上部をサブビューにするか、ツールバーを少し下に移動すると思います。

関連する問題