2012-10-23 9 views

回答

3

A UIView不存儲其幀;它只是返回其圖層的框架。

A CALayer也不存儲它的幀。當您向圖層請求其幀時,圖層將根據圖層的bounds,position,anchorPointtransform計算幀。 (可能它緩存的計算frame,但如果你拆開方法,你會發現代碼從其他屬性計算它。)

而一個CALayer不存儲任何實例變量的屬性。相反,它有一個指向CA::Layer實例的指針,該實例是一個私有的C++對象。該C++對象存儲圖層的屬性。 view->_layer->_attr.layer字段是指向專用CA::Layer實例的指針。

如果你想在調試器中看到一個視圖的幀,你必須給它發送一條消息。你可以要求它爲它的描述:

po _topBubble 

或者,你可以要求它爲它的框架:

p (CGRect)[_topBubble frame] 
+0

很有啓發,一個簡單的問題:你會如何拆解 - [CALayer的幀]的方法來學習更多關於它是如何從其他屬性計算的? –

+1

我在iPhone模擬器的QuartzCore庫上使用了[Hopper](http://www.hopperapp.com/)。 –

+0

很酷,謝謝你:) –

相關問題