您好,登錄后才能下訂單哦!
CALayer對于工作過一段時間的程序員來說一定是熟悉的不能再熟悉了,但是對于一些接觸iOS并不久的人來說還是比較新鮮的,就像我。再加上之前在學習時并沒有接觸過CALayer,所以這個東西對我來說完全就是新東西了。花了點時間看了下,就此總結一些需要注意的地方,以便日后用到時再詳閱。
使用前需要注意的:
1.UIView和CALayer的選擇
其實,對比CALayer,UIView多了一個事件處理的功能。也就是說,CALayer不能處理用戶的觸摸事件,而UIView可以。
所以,在選擇的過程中,需要考慮到實際的情況,如果顯示出來的東西需要跟用戶進行交互的話,用UIView;如果不需要跟用戶進行交互,用UIView或者CALayer都可以
當然,CALayer的性能會高一些,因為它少了事件處理的功能,更加輕量級
2.CGColorRef和CGImageRef數據類型
CALayer是定義在QuartzCore框架中的;CGImageRef、CGColorRef兩種數據類型是定義在CoreGraphics框架中的;UIColor、UIImage是定義在UIKit框架中的
其次,QuartzCore框架和CoreGraphics框架是可以跨平臺使用的,在iOS和Mac OS X上都能使用,但是UIKit只能在iOS中使用
因此,為了保證可移植性,QuartzCore不能使用UIImage、UIColor,只能使用CGImageRef、CGColorRef
不過很多情況下,可以通過UIKit對象的特定方法,得到CoreGraphics對象,比如UIImage的CGImage方法可以返回一個CGImageRef
3.CALayer訪問子層和父層
UIView可以通過subviews屬性訪問所有的子視圖,類似地,CALayer也可以通過sublayers屬性訪問所有的子層
UIView可以通過superview屬性訪問父視圖,類似地,CALayer也可以通過superlayer屬性訪問父層
特別注意:如果一個控件是另外一個控件的子控件,那么這個控件的layer也是另一個控件的子layer。
使用時需要注意的:
一、屬性
CALayer有2個非常重要的屬性:position和anchorPoint
@property CGPoint position;
用來設置CALayer在父層中的位置
以父層的左上角為原點(0, 0)
@property CGPoint anchorPoint;
稱為“定位點”、“錨點”
決定著CALayer身上的哪個點會在position屬性所指的位置
以自己的左上角為原點(0, 0)
它的x、y取值范圍都是0~1,默認值為(0.5, 0.5)
二、隱式動畫
每一個UIView內部都默認關聯著一個CALayer,我們可用稱這個Layer為Root Layer(根層)
所有的非Root Layer,也就是手動創建的CALayer對象,都存在著隱式動畫
什么是隱式動畫?
當對非Root Layer的部分屬性進行修改時,默認會自動產生一些動畫效果
而這些屬性稱為Animatable Properties(可動畫屬性)
列舉幾個常見的Animatable Properties:
bounds:用于設置CALayer的寬度和高度。修改這個屬性會產生縮放動畫
backgroundColor:用于設置CALayer的背景色。修改這個屬性會產生背景色的漸變動畫
position:用于設置CALayer的位置。修改這個屬性會產生平移動畫
關閉隱式動畫
[CATransaction begin]; [CATransaction setDisableActions:YES]; //隱式動畫 self.layer.bounds=CGRectMake(0, 0, 200, 60); self.layer.backgroundColor=[UIColor yellowColor].CGColor; [CATransaction commit];
可以查看頭文件,看有沒有Animatable,如果有則表示支持隱式動畫。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。