2010-07-15 59 views
2

今天我注意到,加入1個CALayer的2子視圖我的看法的時候,當我在UIView實例中運行下面的代碼:在根CALayer的子圖層中計數的子視圖?

[self.layer.sublayers count] 

這將返回3。這是否意味着子視圖也被認爲是子圖層?如果我只想要撥打sublayers電話中的CALayers,我該怎麼做?

+0

我不熟悉與層中使用的層次,但我沒有寫一個[功能登錄的意見層級(http://stackoverflow.com/questions/2715534 /在那裏,確實-A-UIAlertView中,活而 - 不解僱/ 2715772#2715772)。您可以修改此代碼以記錄圖層樹。瞭解視圖和圖層如何嵌套可以幫助您瞭解它如何更好地工作。 – progrmr 2010-07-15 15:11:55

回答

3

是的,每個UIView都有一個潛在的CALayer當視圖添加到超級視圖時,它被添加到它的超級視圖的圖層。

我不知道只找到自己的圖層的理想方法。由於sublayersNSArray(而不是一個NSSet),這意味着它是一個有序的列表,這意味着你可以肯定的是,在其中添加欣賞到上海華順序是它們將出現在所述陣列中的順序相同。因此,如果您先添加您的UIViews,然後添加您自己的繪製CALayers,則可以通過訪問sublayers中索引2(跳過0和1)開始的對象來獲得自己的屬性。

當然,如果你再添加或刪除意見,以上海華你必須修改這個值,所以這個假設的實際工作,你會希望以某種方式動態生成它。

您可以在sublayers屬性上使用indexOfObject:確定添加它時圖層的索引。更安全的路線可能是將此索引簡單地存儲在列表中的某個位置,並僅從該列表訪問具有索引的子層。

1

如果我只想要在我的sublayers中調用的CALayers, 我該怎麼做?

您可以通過將當前子視圖self的子視圖設置爲兄弟視圖來做到這一點,因爲它們都是包含視圖的子視圖。然後你目前的self.layer.sublayers只包含你手動添加的CALayers。想一想

一種方法是,它是層層次結構中,不是視圖層次限定渲染層次結構。視圖層次結構只是處理UIView添加到其底層CALayer圖形的交互性的包裝器。因此,當你將一個子視圖添加到一個視圖時,雖然在某種意義上獨立地將它的圖層作爲子圖層添加到視圖的圖層中。你很可能會覆蓋在UIView的一個子類或類此功能...

1

從CALayer的文檔:

代表

指定接收方的委託對象。

@property(分配)ID代表

討論

在iOS中,如果該層與一個UIView對象相關聯,該屬性必須設置爲擁有該層的視圖。

狀況

可在OS X v10.5及其以後。

相關示例代碼