layer tree? 分為 model layer tree(模型圖層樹) 、presentation layer tree(表示圖層樹) 、render layer tree(渲染圖層樹)

創(chuàng)新互聯(lián)致力于成都網站設計、成都網站建設,成都網站設計,集團網站建設等服務標準化,推過標準化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務水平進行質量交付,讓企業(yè)網站從市場競爭中脫穎而出。 選擇創(chuàng)新互聯(lián),就選擇了安全、穩(wěn)定、美觀的網站建設服務!
這三種圖層樹有什么作用呢?說到有啥作用,就不得不提Core Animation 核心動畫了。因為這三個圖層在核心動畫中才能顯示出它們的特點和用處。下面是官方文檔的說明:
有沒有感覺看了官方文檔的說明還是有點點小懵逼的。那我就用我的理解再解釋下。這三個圖層在CALayer中可以使用的屬性有兩個,分別是: modelLayer (模型圖層)、 presentationLayer (表現(xiàn)圖層)。渲染圖層在CALayer沒有提供直接的屬性給我們使用,是core Animation私有的。這里就不用說它了。
一說到"模型"大家第一反應是什么?是不是用來裝數(shù)據用的,是不是會想到對象模型的概念。"模型圖層" 其實就是這個作用,就是創(chuàng)建一個layer 然后給這個layer賦上你需要的數(shù)據。大家是不是在創(chuàng)建layer后,都會給生成的layer 賦值各種屬性,通過這種賦值,有沒感覺到這個layer本身就是modelLayer呢?那我告訴大家,必須的、必須的、必須的。重要的事情說三邊。。。 layer = layer.modelLayer .(后面的栗子會證明這點)
"表現(xiàn)圖層" 就是當前顯示在屏幕上的圖層。屏幕刷新時,就會調用presentationLayer。在core animation 動畫中,可以通過這個屬性,獲取動畫過程中每個時刻動畫圖層的數(shù)據,這樣如果在動畫過程中需要做什么處理,就可以動態(tài)的獲取layer上相關的數(shù)據了。動畫的過程中presentationLayer是時刻變化的,而modelLayer是不會變的。
使用basicAnimation 改變position.x的值
通過打印self.containerView.layer.modelLayer 和 self.containerView.layer.presentationLayer的frame值對比:
第一組值:
layer.presentationLayer.frame = {{ 153.75329732894897 , 100}, {100, 467}}
layer.modelLayer.frame = {{137.5, 100}, {100, 467}}
第二組值:
layer.presentationLayer.frame = {{ 154.70316648483276 , 100}, {100, 467}}
layer.modelLayer.frame = {{137.5, 100}, {100, 467}}
第三組值:
layer.presentationLayer.frame = {{ 170.95646381378174 , 100}, {100, 467}}
layer.modelLayer.frame = {{137.5, 100}, {100, 467}}
第四組值:
layer.presentationLayer.frame = {{ 185.73218822479248 , 100}, {100, 467}}
layer.modelLayer.frame = {{137.5, 100}, {100, 467}}
第五組值:
layer.presentationLayer.frame = {{ 201.87994480133057 , 100}, {100, 467}}
layer.modelLayer.frame = {{137.5, 100}, {100, 467}}
第六組值:
layer.presentationLayer.frame = {{ 204.41292762756348 , 100}, {100, 467}}
layer.modelLayer.frame = {{137.5, 100}, {100, 467}}
通過六組值的觀察,可以看出,動畫一開始到結束,presentationLayer的frame一直在改變,而modelLayer的frame一直沒變過,為什么presentationLayer的frame會發(fā)生變化呢?因為做動畫的時候改變了layer的position.x值,position值的改變,會影響frame的值。
從這里我們就可以看出modelLayer 和 presentationLayer本質區(qū)別了,modelLayer 負責存儲動畫的目標值的模型對象。每當更改圖層的屬性時,它都會把數(shù)據存儲下來 。當動畫開始執(zhí)行時,presentationLayer就上場了。屏幕上顯示的就是presentationLayer,動畫的過程中,你可以時刻訪問動態(tài)變化的數(shù)據。例如:視頻中的滾動彈幕如果是使用layer做動畫的,當彈幕正在滾動時,你需要點擊它以處理需要做的事情,這時候你就會需要presentationLayer。再結合hintTest方法來做判斷:
從這個截圖可以看出 self.layer = self.laye.modelLayer 、 self.layer != self.layer.presentationLayer。 就是layer本身其實就是一個模型layer,只不過它擁有 presentationLayer。
CALayer是Core Animation的基礎,layer tree更是Core Animation 核心動畫執(zhí)行過程中直接使用的對象,了解清楚layer的內在層級關系,才能更好的從細節(jié)上處理核心動畫相關的事情。
iOS中所有view都是用底層的layer來驅動的。view 和它的 layer 之間有著緊密的聯(lián)系,view 其實直接從 layer 對象中獲取了絕大多數(shù)它所需要的數(shù)據。在 iOS 中也有一些單獨的 layer,比如 AVCaptureVideoPreviewLayer 和 CAShapeLayer ,它們不需要附加到 view 上就可以在屏幕上顯示內容。兩種情況下其實都是 layer 在起決定作用。當然了,附加到 view 上的 layer 和單獨的 layer 在行為上還是稍有不同的。
UIView 相比 CALayer 最大區(qū)別是 UIView 可以響應用戶事件,而 CALayer 不可以。 UIView 側重于對顯示內容的管理, CALayer 側重于對內容的繪制。
萬物歸根, UIView 和 CALayer 的老祖都是 NSObjet 。
UIView的繼承結構為: UIResponder : NSObject。
UIResponder 是用來響應事件的,也就是 UIView 可以響應用戶事件。
CALayer 的繼承結構為: NSObject 。
直接從 NSObject 繼承,因為缺少了 UIResponder 類,所以 CALayer 不能響應任何用戶事件。
CALayer 定義了 position 、 size 、 transform 、 animations 等基本屬性。
UIView 可以響應事件, Layer 不可以
UIKit 使用 UIResponder 作為響應對象,來響應系統(tǒng)傳遞過來的事件并進行處理。 UIApplication 、 UIViewController 、 UIView 、和所有從 UIView 派生出來的 UIKit 類(包括 UIWindow )都直接或間接地繼承自 UIResponder 類。
在 UIResponder 中定義了處理各種事件和事件傳遞的接口, 而 CALayer直接繼承 NSObject ,并沒有相應的處理事件的接口。
下面列舉一些處理觸摸事件的接口
iOS中View和layer的區(qū)別:
1、View負責處理事務,layer用于顯示.
2、layer是CALayer的類型,其創(chuàng)建方式和UIView創(chuàng)建方式類似。不過通過此方式添加的圖層在模擬器的層次結構中只能看到一個view。其相當于在view上染了一個寬和高分別為80的湖藍色,而不是在view上添加了一個寬和高為80的view。
layer用法:
1、CALayer *layer = [[CALayer alloc] init];
2、layer.bounds = CGRectMake(100,100,80,80); ??//設置其大小
3、layer.backgroundColor = [UIColor cyanColor].CGColor; ?//設置其背景色
4、layer.position = CGPointMake(200,200); ??//設置其位置
5、[self.view.layer addSublayer:layer]; ??//將其添加到根圖層上
應該你可以設置這個layer的TouchHandle的swallowsTouches為YES,這樣就吞下了這個touch,其他的層就不再響應了,就CCMenuItem一樣的處理方法,你可以試一下。 希望能幫助到你。
網站題目:ios開發(fā)layer,IOS開發(fā)者模式
標題路徑:http://chinadenli.net/article29/dsspsjh.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供用戶體驗、定制開發(fā)、網站收錄、動態(tài)網站、虛擬主機、網站策劃
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)