一、什么是CALayer
在iOS系統(tǒng)中,你能看得見摸得著的東西基本上都是UIView,比如一個(gè)按鈕、一個(gè)文本標(biāo)簽、一個(gè)文本輸入框、一個(gè)圖標(biāo)等等,這些都是UIView。
其實(shí)UIView之所以能顯示在屏幕上,完全是因?yàn)樗鼉?nèi)部的一個(gè)層。
在創(chuàng)建UIView對(duì)象時(shí),UIView內(nèi)部會(huì)自動(dòng)創(chuàng)建一個(gè)層(即CALayer對(duì)象),通過UIView的layer屬性可以訪問這個(gè)層。當(dāng)UIView需要顯示到屏幕上時(shí),會(huì)調(diào)用drawRect:方法進(jìn)行繪圖,并且會(huì)將所有內(nèi)容繪制在自己的層上,繪圖完畢后,系統(tǒng)會(huì)將層拷貝到屏幕上,于是就完成了UIView的顯示。
換句話說,UIView本身不具備顯示的功能,是它內(nèi)部的層才有顯示功能。
二、CALayer的基本作用
?通過操作CALayer對(duì)象,可以很方便地調(diào)整UIView的一些外觀屬性,比如:
- 陰影
- 圓角大小
- 邊框?qū)挾群皖伾?br> ……
?還可以給圖層添加動(dòng)畫,來實(shí)現(xiàn)一些比較炫酷的效果
三、CALayer的屬性
?寬度和高度
@propertyCGRect bounds;
?位置(默認(rèn)指中點(diǎn),具體由anchorPoint決定)
@property CGPoint position;
?錨點(diǎn)(x,y的范圍都是0-1),決定了position的含義
@property CGPoint anchorPoint;
?背景顏色(CGColorRef類型)
@property CGColorRef backgroundColor;
?形變屬性
@property CATransform3D transform;
?邊框顏色(CGColorRef類型)
@property CGColorRef borderColor;
?邊框?qū)挾?br> @property CGFloat borderWidth;
?圓角半徑
@property CGColorRef borderColor;
?內(nèi)容(比如設(shè)置為圖片CGImageRef)
@property (retain) id contents;
四、CALayer有2個(gè)非常重要的屬性:position和anchorPoint
- @property CGPoint position;
用來設(shè)置CALayer在父層中的位置
以父層的左上角為原點(diǎn)(0, 0)
- @property CGPoint anchorPoint;
稱為“定位點(diǎn)”、“錨點(diǎn)”
決定著CALayer身上的哪個(gè)點(diǎn)會(huì)在position屬性所指的位置
以自己的左上角為原點(diǎn)(0, 0)
它的x、y取值范圍都是0~1,默認(rèn)值為(0.5,0.5)

注意:position和anchorPoint的點(diǎn)是重合的(中心點(diǎn)/旋轉(zhuǎn)點(diǎn)),兩者一起決定圖層的位置

五、隱式動(dòng)畫
每一個(gè)UIView內(nèi)部都默認(rèn)關(guān)聯(lián)著一個(gè)CALayer,我們可用稱這個(gè)Layer為Root Layer(根層),所有的非Root Layer,也就是手動(dòng)創(chuàng)建的CALayer對(duì)象,都存在著隱式動(dòng)畫
?什么是隱式動(dòng)畫?
當(dāng)對(duì)非Root Layer的部分屬性進(jìn)行修改時(shí),默認(rèn)會(huì)自動(dòng)產(chǎn)生一些動(dòng)畫效果,而這些屬性稱為Animatable Properties(可動(dòng)畫屬性)
?列舉幾個(gè)常見的Animatable Properties:
bounds:用于設(shè)置CALayer的寬度和高度。修改這個(gè)屬性會(huì)產(chǎn)生縮放動(dòng)畫
backgroundColor:用于設(shè)置CALayer的背景色。修改這個(gè)屬性會(huì)產(chǎn)生背景色的漸變動(dòng)畫
position:用于設(shè)置CALayer的位置。修改這個(gè)屬性會(huì)產(chǎn)生平移動(dòng)畫
?可以通過動(dòng)畫事務(wù)(CATransaction)關(guān)閉默認(rèn)的隱式動(dòng)畫效果
[CATransactionbegin];
[CATransactionsetDisableActions:YES];
self.myview.layer.position= CGPointMake(10, 10);
[CATransactioncommit];
六、UIView和CALayer的選擇:

七、CALayer的運(yùn)用
運(yùn)用場(chǎng)景:





-
github
| 項(xiàng)目 | 簡(jiǎn)介 |
| : | : |
| MGDS_Swif | 逗視視頻直播 |
| MGMiaoBo | 喵播視頻直播 |
| MGDYZB | 斗魚視頻直播 |
| MGDemo | n多小功能合集 |
| MGBaisi | 高度仿寫百思 |
| MGSinaWeibo | 高度仿寫Sina |
| MGLoveFreshBeen | 一款電商App |
| MGWeChat | 小部分實(shí)現(xiàn)微信功能 |
| MGTrasitionPractice | 自定義轉(zhuǎn)場(chǎng)練習(xí) |
| DBFMDemo | 豆瓣電臺(tái) |
| MGPlayer | 一個(gè)播放視頻的Demo |
| MGCollectionView | 環(huán)形圖片排布以及花瓣形排布 |
| MGPuBuLiuDemo | 瀑布流--商品展 |
| MGSlideViewDemo | 一個(gè)簡(jiǎn)單點(diǎn)的側(cè)滑效果,仿QQ側(cè)滑 |
| MyResume | 一個(gè)展示自己個(gè)人簡(jiǎn)歷的Demo |
| GoodBookDemo | 好書 |



-
2、逗視:逗你玩的直播App,可下載試玩
看下效果

