CALayer

一、什么是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.png
注意:position和anchorPoint的點(diǎn)是重合的(中心點(diǎn)/旋轉(zhuǎn)點(diǎn)),兩者一起決定圖層的位置
Snip20160528_6.png

五、隱式動(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的選擇:

UIView和CALayer的選擇.png

七、CALayer的運(yùn)用

運(yùn)用場(chǎng)景:

1太陽.png
2.音量條
3.倒影.png
4.粒子效果

Snip20160529_20.png



  • 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 | 好書 |

Snip20161026_15.png

Snip20161026_16.png

Snip20161026_35.png
逗視介紹1.gif

逗視介紹2.gif

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在iOS中隨處都可以看到絢麗的動(dòng)畫效果,實(shí)現(xiàn)這些動(dòng)畫的過程并不復(fù)雜,今天將帶大家一窺iOS動(dòng)畫全貌。在這里你可以看...
    F麥子閱讀 5,267評(píng)論 5 13
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫效果,實(shí)現(xiàn)這些動(dòng)畫的過程并不復(fù)雜,今天將帶大家一窺ios動(dòng)畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,688評(píng)論 6 30
  • CALayer - 在iOS中,你能看得見摸得著的東西基本上都是UIView,比如一個(gè)按鈕、一個(gè)文本標(biāo)簽、一個(gè)文本...
    Hevin_Chen閱讀 1,222評(píng)論 0 10
  • CALayer1-簡(jiǎn)介 本文目錄 一、什么是CALayer 二、CALayer的簡(jiǎn)單使用 回到頂部 一、什么是CA...
    白水灬煮一切閱讀 2,656評(píng)論 0 8
  • CALayer簡(jiǎn)介: CALayer我們又稱它叫做層,CALayer類的概念與UIView非常類似,并且可以包含圖...
    李小南閱讀 2,605評(píng)論 2 3

友情鏈接更多精彩內(nèi)容