在CALayer的API中,'position'用於設置圖層的位置。設置CALayer的bounds.origin是做什麼的?
通過我自己的測試,設置bounds.origin不會做任何事情。我錯過了什麼嗎?
在CALayer的API中,'position'用於設置圖層的位置。設置CALayer的bounds.origin是做什麼的?
通過我自己的測試,設置bounds.origin不會做任何事情。我錯過了什麼嗎?
bounds.origin
控制圖層座標系的原點相對於其上層圖層的框架。改變它有兩個可見的效果:
層的子層的位置。例如,當您滾動UIScrollView
時,滾動視圖不會更改其子視圖的框架。它只是更改其bounds.origin
。我建議設置一個帶有滾動視圖的玩具應用程序,並使用定時器或其他觸發器來執行NSLog("scroll view bounds = %@", NSStringFromCGRect(scrollView.bounds));
,以瞭解發生了什麼。
圖形上下文座標系的原點drawInContext:
。通常你會在視圖的drawRect:
方法中看到這種效果。您的CGContext
裏面的drawRect:
已被翻譯self.bounds.origin
。
您可能會發現它有助於瞭解「View Geometry and Coordinate Systems」 in the View Programming Guide for iOS和「Layer Objects Define Their Own Geometry」 in the Core Animation Programming Guide,但真的沒有人有界限起源的很好的討論。
更改邊界矩形會更改圖層自身座標系中內容的位置和大小。改變框架(或位置)可以改變圖層在其超級圖層座標系中的位置。通常你只想改變框架,而不是邊界。
您給出的描述是frame.origin。讓我知道如果我錯過了什麼。 –
'frame.origin'影響圖層在其上層的位置。 'bounds.origin'會影響圖層子圖層和內容的位置。 –
您對#2錯誤。一個圖層的bounds.origin不會影響其內容的位置,而只會影響其子圖層的位置。例如,如果將CGImage分配給layer.contents,然後偏移bounds.origin,圖像將不會移動。 – algal