簡體   English   中英

如何在CALayer中定位“ contents” png?

[英]How do I position `contents` png in CALayer?

我是否必須移動圖層框架或對圖層應用轉換矩陣變換? 或者也許我可以將contents移動到圖層內部? 如果內容在圖層內部不可移動,則最初將如何定位?

CALayer具有框架(或等效地,邊界和原點),該框架在邏輯上用於確定要繪制的內容。 當調用drawInContext:或等效方法時,框架決定了內容的生成方式。

但是,像OS X一樣,iOS采用了復合窗口管理器,這意味着視圖知道如何將其輸出繪制到緩沖區中,並且將緩沖區合並以創建視圖,而窗口管理器會確定如何處理緩存和視頻內存管理之間。

如果調整視圖或圖層類的transform屬性,則調整合成的方式。 但是,drawInContext:的結果應該仍然明確相同,以便窗口管理器知道它可以只使用緩存的圖像。

因此,例如,如果您設置了一個尺寸為128x128的幀,然后進行了將CALayer縮放為兩倍的轉換,則您將占據屏幕的256x256區域,但是用於合成的圖像大小僅為128x128源像素分成四個目標像素。 如果設置尺寸為256x256的幀並進行身份轉換,則將覆蓋相同數量的屏幕空間,但每個源像素與目標像素的比例為1:1。

副作用是,更改框架會導致重蹈覆轍。 更改變換不會。 因此,后者通常更快,如果您決定使用CATiledLayer(在Safari,Maps等中使用)之類的東西來繪制單獨的線程,並且可能需要一段時間才能得出結果,這也是要做的事情。

根據經驗,您可以使用框架設置初始位置並更新框架以進行常規工作。 您可以使用變換進行過渡和其他特殊效果。 但是,從CoreAnimation的角度來看,CATiledLayer的所有frame和transform屬性都是可動畫的,因此實際上仍由您決定。

大多數人不使用CALayer級別,但更喜歡使用UIViews。 在這種情況下,注釋基本相同,但需要注意的是,您可以調整視圖的[2d]變換或視圖層的[3d]變換,讓合成器將其全部弄清楚,但將框架更改為提示重畫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM