Swift — 說說 圖層( CALayer )
Apple Documentation 〉Core Animation 〉CALayer
CALayer:An object that manages image-based content and allows you to perform animations on that content.
Layer 通常被用於提供 View 後備儲存,但是也可以被用於在沒有 View 的時候顯示內容。而 Layer 的主要工作是管理你所提供的視覺內容,但是 Layer 本身有可以被設置的視覺屬性,像是 background color、border、shadow。除了管理視覺內容外,Layer 也維護用於顯示在螢幕上有關該內容的幾何結構訊息。
修改 Layer 的屬性是你如何在該 Layer 的內容或幾何內容上啟動動畫的方式。一個 Layer 對象透過採用定義 Layer 時間訊息 CAMediaTiming protocol 來封裝 Layer 以及其動畫的持續時間和步調。
如果 Layer 對象是經由 View 創建的,則 View 一般自動將指定自己為 Layer 的委託( delegate ),並且你不應該更改其關聯。對於你自己所創建的 Layer,你可以指定一個 delegate 的對象並且使用該對象來動態提供 Layer 的內容並且進行其他任務。
一個 Layer 也可以有一個佈局管理器對象( 指定給 layoutManager 屬性 )來個別管理 subview 的佈局。
為什麼需要使用 Layers ?
可以參考這份文章中的 ——「 為什麼需要Layers? 」,裡面解釋得很詳細,這邊就不再多做說明了:
Modifying the Layer’s Appearance
接下來讓我們進一步探討以及實作 CALayer 基本功能。
首先我們先用 Storyboard 拖入一個 UIView 並且設定長寬各設置為 200 置中對齊 View,並且為它加上一個顏色。
建立完成後,將它與程式碼做連接,之後將開始進行對 Layer 的屬性改動:
- 圓角效果
myView.layer.cornerRadius
當我們 cornerRadius 值越大,那麼圓角幅度會更明顯。
- 陰影效果
// Layer 陰影的偏移量位置myView.layer.shadowOffset = CGSize(width: 10, height: 10)// Layer 陰影的不透明度myView.layer.shadowOpacity = 0.5// 模糊半徑(以點為單位)用於呈現 Layer 陰影。myView.layer.shadowRadius = 10// Layer 陰影顏色myView.layer.shadowColor = UIColor.black.cgColor
- 邊框效果
// Layer 邊框顏色myView.layer.borderColor = UIColor.black.cgColor// Layer 邊框寬度myView.layer.borderWidth = 10
- 加入圖片
// 提供 Layer 內容的對象myView.layer.contents = UIImage(named: "Ferris wheel")?.cgImage// 指定的 Layer 內容在 bounds 內如何被定位或縮放的常量。myView.layer.contentsGravity = kCAGravityResize// 一個 Bool 值,表示 subLayer 是否被裁切到 Layer 邊界。myView.layer.masksToBounds = true
- 設置背景顏色及透明度
// 接收器的背景顏色myView.layer.backgroundColor = UIColor.blue.cgColor// 接收器的不透明度myView.layer.opacity = 0.5
假如你有去蘋果官方文件看過,會發現其中有很多效果設置後面都接著 Animatable 。表示我們可能可以對這些設置進行一些動畫效果,我們之後的CALayer 研究可以試著摸索這一塊,本次初入 Layer 到這邊結束了。