2013-10-21 87 views
5

我創建了一個容器視圖,該視圖包含一系列子視圖 - 一個集合視圖,一個自定義工具欄和一些小零件。drawRect覆蓋子視圖?

該設計在頂部,左側和右側有一個邊框,但不是底部,所以我將覆蓋drawRect以包含邊框。

當我添加工具欄時,我發現它出現在邊框的頂部。 (出於某種原因,我最初認爲它不會,但當然它!)。

有無論如何我可以告訴drawRect繪製我的子視圖頂部?

當然,還有其他一些方法來解決我的問題(例如調整工具欄的框架),但我問這個問題,以深入瞭解繪圖如何工作與合成和視圖層次結構。

+0

考慮使用'zIndex' – onmyway133

回答

5

繪圖發生在UIView的所有子視圖下。將其視爲基礎 - 您視圖的實際部分 - 然後將每個子視圖添加到視圖頂部。爲了製作上面的圖紙,子視圖與子視圖出現在視圖下同時仍然是子視圖相同。也許這種比喻更清楚地說明爲什麼它總是處於最底層。並且它也會引導您邏輯地進入解決方案:

要讓繪圖出現在子視圖上方,只需創建一個新的UIView子類來放置繪圖代碼,並將其放在其他所有子視圖之上。

覆蓋你的UIView的addSubview:實現可能也是一個好主意,以確保你的子視圖始終保持在最前面。

+0

謝謝。回顧過去的瘋狂問題。當然,繪圖必須服從視圖層次結構。它還能做什麼? –

2

我相信你不能,因爲drawRect被視爲第一個視圖,當它完成繪圖時,drawRect被調用以便子視圖繪製它。也許只是在該視圖的頂部創建另一個子視圖,該視圖具有您需要的邊框並且在其他地方都是透明的?

2

子視圖是drawn on top of their super views。所以你的問題的答案是否定的。

當你在容器視圖上繪製邊框時,Cocoa甚至還沒有開始繪製工具欄。

我想你可以使邊界的頂部爲子視圖或向下移動工具欄。