Swift — 說說 圖層( CALayer )

Apple Documentation 〉Core Animation 〉CALayer

Jeremy Xue
6 min readJun 7, 2018

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 是 Core Animation Framework 的一部分。Core Animation Framework 在 iOS 架構的位置。

Modifying the Layer’s Appearance

接下來讓我們進一步探討以及實作 CALayer 基本功能。

首先我們先用 Storyboard 拖入一個 UIView 並且設定長寬各設置為 200 置中對齊 View,並且為它加上一個顏色。

建立一個簡單的 View

建立完成後,將它與程式碼做連接,之後將開始進行對 Layer 的屬性改動:

  • 圓角效果
myView.layer.cornerRadius

當我們 cornerRadius 值越大,那麼圓角幅度會更明顯。

cornerRadius 由左至右的值為 10、50、100
  • 陰影效果
// 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
套用上面設置的圖片效果呈現
masksToBounds 左邊為 true,右邊為 false。(這邊套用圓角跟邊框看得比較清楚些)
  • 設置背景顏色及透明度
// 接收器的背景顏色myView.layer.backgroundColor = UIColor.blue.cgColor// 接收器的不透明度myView.layer.opacity = 0.5
套用上述設置的 Layer 效果

假如你有去蘋果官方文件看過,會發現其中有很多效果設置後面都接著 Animatable 。表示我們可能可以對這些設置進行一些動畫效果,我們之後的CALayer 研究可以試著摸索這一塊,本次初入 Layer 到這邊結束了。

--

--

Jeremy Xue
Jeremy Xue

Written by Jeremy Xue

Hi, I’m Jeremy. [好想工作室 — iOS Developer]

No responses yet