CALayer 緒論(iOS論文系列)未釋出篇

SSBun發表於2017-12-13

#####今天在處理一些問題的時候,又牽扯到了圖層的處理,然後開始發掘大腦深處的記憶,不過,O(∩_∩)O~發現自己又忘的差不多了,然後開始檢視一些關於CALayer的資料,花費的時間不多,但是感覺這已經是我第N+N次檢視這些東西了(感覺自己好笨~),每次都會浪費時間來收索想要的東西,但也從來沒有對CALayer有任何系統的瞭解,總是在使用的過程中,突然發現:我擦,怎麼會有這個子類;這個,我怎麼不知道有這個屬性。終於我不能忍了,就是現在,我要回歸修真模式,好好的整理一下這個~常用但又不常用~的傢伙,也作為我《iOS論文系列》的開篇之作。

###繼承關係

  • NSObject
    • CALayer
      1. AVCaptureVideoPreviewLayer(多媒體捕獲視訊預覽圖層)
      2. AVPlayerLayer(多媒體播放圖層)
      3. AVSampleBufferDisplayLayer(多媒體緩衝顯示圖層)
      4. AVSynchronizedLayer(多媒體同步圖層)
      5. CAEAGLLayer((⊙o⊙)...)
      6. CAEmitterLayer(粒子發射圖層)
      7. CAGradientLayer(梯度顯示圖層)
      8. CAMetalLayer(金屬圖層)
      9. CAReplicatorLayer(複製圖層)
      10. CAScrollLayer(滾動圖層)
      11. CAShapeLayer(形狀圖層)
      12. CATextLayer(文字圖層)
      13. CATiledLayer(瓷磚圖層)
      14. CATransformLayer(轉換圖層)

###遵守協議

  • CAMediaTiming
  • CVarArgType
  • CustomStringConvertible
  • Equatable
  • Hashable
  • NSCoding
  • NSObjectProtocol

###引入標頭檔案

	SWIFT:
		import QuartzCore
	OBJECTIVE-C
		@import @"QuartzCore";
複製程式碼

###支援

  • 支援iOS2.0以後

###簡介 CALayer主要是用來管理基於影象的內容,並允許你執行動畫在它的上面。圖層一般是用來做View(檢視)內容的容器但是也可以脫離View而直接顯示內容。一個Layer的主要工作是管理顯示你所提供的視覺內容,但是其內部有很多視覺屬性可以被設定,例如:(backgroundColor)背景色,(border)邊框,(shadow)陰影等。除了管理視覺內容,Layer還維持其在螢幕上顯示的圖形資訊(例如:(中心點位置)position,(大小)size,(形變資訊)transform),修改Layer的屬效能夠讓你開啟一個動畫,一個Layer物件可以設定動畫時長和步調(節奏),其動畫採用CAMediaTiming協議,它定義了圖層的定時資訊。

如果一個Layer通過一個View被建立,View通常自動給自己分配Layer的代理,一般情況下,不要改變它們之間的關聯。如果你自己建立一個Layer,你可以設定一個代理(delegate)物件,並通過它來動態設定Layer的內容或執行其他的任務,一個Layer也有可能會有一個佈局管理者物件(設定LayoutManager屬性)去分別管理子檢視的佈局。 ###圖層構造方法

方法 描述
init() // 初始化一個圖層
init(layer layer:AnyObject) // 根據指定的圖層複製或重新初始化一個圖層,此構造方法一般用於建立圖層陰影的副本,類是於presentationLayer方法。使用此方法在其他情景可能會產生意想不到的後果,類如,不要用此方法和一個已經有內容的圖層來初始化一個新的圖層。

###訪問相關的圖層物件

方法 描述
presentationLayer() // 返回當前圖層顯示在螢幕上的那一部分的圖層
modelLayer() //返回一個代表底層圖層的例項,圖形顯示樹中的一個圖層呼叫此方法會返回相對應的模型樹中的例項物件。此方法只有當此圖層顯示出來並正處於一個事務中時才會有返回值,如果沒有正處於事務中呼叫此方法返回值不確定。

###圖層代理

屬性 描述
delegate : AnyObject? 你可以通過代理設定圖層的內容,比如往圖層中新增圖片,控制子圖層的佈局,或者定義行為當圖層發生改變的時候,設定代理需要實現至少一個CALayerDelegate協議中的方法,在iOS中,如果是一個檢視的圖層(這個圖層和此檢視有關聯),那麼這個代理必須是檢視自己。

###圖層內容

屬性 描述
contents : AnyObject 預設圖層是沒有內容的,此屬性為nil,如果你想要使用圖層來顯示一個靜態圖片,你可以通過此屬性設定一個CGImageRef包含你想要顯示的圖片(在 OS X 10.6 以後,你也可以給此屬性賦值一個NSImage物件),如果一個圖層與檢視有關聯,最好不要立即設定圖層的內容,因為圖層的內容會和檢視之間有衝突,檢視可能會重新整理圖層從而把設定的內容給替換掉。
**contentsCenter : **

相關文章