Sitemap

CALayer

Nov 4, 2021

--

Layer 通常被用於提供 View 後備儲存,但是也可以被用於在沒有 View 的時候顯示內容。而 Layer 的主要工作是管理你所提供的視覺內容,但是 Layer 本身有可以被設置的視覺屬性,像是 background color、border、shadow。除了管理視覺內容外,Layer 也維護用於顯示在螢幕上有關該內容的幾何結構訊息。
(https://jjeremy-xue.medium.com/初入-layer-calayer-58499a414e9a)

CA在iOS圖形繪製中的層次

Press enter or click to view image in full size

從層次上來看會發現,我們常用的UIKit位在最上層,讓我們避免了多寫不必要的程式碼,但這也導致無法滿足開發中的部分功能,因此,透過CA我們可以使用較底層的APIs,更彈性的使用各項功能。(https://www.appcoda.com.tw/calayer-introduction/)

但須注意,CALayer雖然讓我們得以更直接使用不同的繪圖功能,若添加過多效果,還是會影響效能;因此,有兩個CALayer的屬性可以協助處理效能問題,分別是如下:

  • drawsAsynchronously(異步繪製):指定CPU讓繪製在背景執行 -> 用於頻繁繪製的作業(地圖、tableview等)
  • shouldRasterize(點陣化):轉換成像素點 -> 用在不會頻繁繪製的作業

但在開發的過程中,大多(幾乎)不會有此影響問題,而且手動調整繪製功能有可能影響App的運作效能,還是建議除非視圖繪製會嚴重影響效能表現時,再考慮手動調整上述的兩個屬性。

延伸討論 UIBezierPath -> 繪製形狀

透過路徑的設定,生成不同的形狀

Get Daniel’s stories in your inbox

Join Medium for free to get updates from this writer.

記得初始生成時,若要將點移動暫時且不畫出,需透過move(to:)方法移到定位點,之後接的點才會繪製,繪製完最後一個點時,系統會自動判定回歸到初始點,以下為繪製三角形的範例:

如此便會形成

而在playground顯示會顛倒成

主要是由於UIBezierPath是以左下為原點,而iOS使用的View則是左上為原點,當我們將UIBezierPath成相時,會透過View或是CALayer,因此會自動調整為左上為原點,圖形就不會顛倒了!

這邊補充了其他圖形的畫法,包含mask(遮罩)使用、curve(弧線)...等:

https://medium.com/彼得潘的-swift-ios-app-開發問題解答集/運用-uibezierpath-繪製形-3c858e194676

--

--

Daniel
Daniel

Written by Daniel

iOS Developer 太陽牡羊上升水瓶