iOS封裝的UIView動(dòng)畫實(shí)現(xiàn)很簡單狂丝,但是他的靈活性比較低涮母。CALayer是和UIView同層級的沪蓬。
CALayer的功能:
1.陰影跷叉,圓角休蟹,帶顏色的邊框
2.3D變換
3.非矩形范圍
4.透明遮罩
5.多級非線性動(dòng)畫
CALayer 有一個(gè)屬性叫做contents,這個(gè)屬性的類型被定義為id,意味著它可以是任何類型的對象于毙。但是如果不是CGImage的對象的話就沒什么效果。iOS開發(fā)中有個(gè)“Toll-free bridging”的名詞堪遂,意思是可以在某個(gè)框架的方法或函數(shù)同時(shí)使用Core Foundatio和Foundation 框架中的某些類型溶褪。
類型轉(zhuǎn)換關(guān)鍵字區(qū)別:
__bridge (相當(dāng)于assign 還是要自己管理對象)
__bridge_transfer(相當(dāng)于copy后release?? 轉(zhuǎn)讓了自己對對象的所有權(quán)交給別人去管理)
__bridge_retained(相當(dāng)于retain 增加額對象的引用計(jì)數(shù))
ok再看看contents真正要賦值的類型應(yīng)該是CGImageRef币旧,因?yàn)镃GImageRef并不是一個(gè)真正的Cocoa對象,而是一個(gè)Core Foundation類型猿妈。所以賦值的時(shí)候是這樣的layer.contents = (__bridge id)image.CGImage;
這樣我們就沒有用UIImageView展示一張圖片了吹菱,不過這時(shí)候你可能會(huì)發(fā)現(xiàn)問題,就是這個(gè)圖片可能看著不自然彭则。鳍刷。。其實(shí)是因?yàn)槔斓木壒省?/p>
有兩種解決辦法:
設(shè)置view的contentMode屬性可以進(jìn)行配置贰剥。
1.view.contentMode = UIViewContentModeScaleAspectFit;
2.view.layer.contentsGravity = kCAGravityResizeAspect;
這樣看著就不會(huì)拉伸了倾剿。
還有一個(gè)屬性叫做contentsScale,寄宿圖的像素尺寸和視圖大小的比例,默認(rèn)情況下它是一個(gè)值為1.0的浮點(diǎn)數(shù)蚌成。
View.layer.contentsScale = 4.f;//表示每個(gè)點(diǎn)由4個(gè)像素繪制前痘。
如果contentsGravity屬性是kCAGravityResizeAspect那么contentsScale就失效了。因?yàn)閗CAGravityResizeAspect僅僅是將圖片進(jìn)行拉伸適應(yīng)了而已
下面介紹一個(gè)強(qiáng)大的屬性contentsRect担忧,默認(rèn)的contentsRect是{0, 0, 1, 1}就是說整個(gè)寄宿圖就是可見的芹缔。前兩個(gè)參數(shù)就是距離原點(diǎn)的數(shù)值,后面的是顯示這個(gè)圖片的多少比例的圖像瓶盛。實(shí)際使用時(shí)可以利用這個(gè)屬性進(jìn)行拼接圖片最欠。
圓角屬性
CALayer有一個(gè)叫做conrnerRadius的屬性控制著圖層角的曲率,默認(rèn)0是直角,設(shè)置為寬高的一半的話就是一個(gè)圓惩猫;如果把CALayer的masksToBounds設(shè)置成YES的話芝硬,圖層里面的所有東西都會(huì)被截取。
陰影屬性
現(xiàn)在到處都是扁平化設(shè)計(jì)轧房,以至于陰影屬性一般用不到拌阴,但是陰影屬性本身還是很棒的,我有個(gè)設(shè)計(jì)朋友他就喜歡給他們?nèi)恿Ⅲw感的控件效果圖~~
1 奶镶、shadowOpacity屬性就是控制陰影強(qiáng)度的迟赃。
2陪拘、shadowColor屬性控制著陰影的顏色,和borderColor和backgroundColor一樣纤壁,它的類型也是CGColorRef左刽。
3、shadowOffset屬性控制著陰影的方向和距離酌媒。它是一個(gè)CGSize的值欠痴,寬度控制這陰影橫向的位移,高度控制著縱向的位移秒咨。shadowOffset的默認(rèn)值是 {0, -3}斋否,意即陰影相對于Y軸有3個(gè)點(diǎn)的向上位移。
4拭荤、shadowRadius屬性控制著陰影的模糊度茵臭,當(dāng)它的值是0的時(shí)候,陰影就和視圖一樣有一個(gè)非常確定的邊界線舅世。當(dāng)值越來越大的時(shí)候旦委,邊界線看上去就會(huì)越來越模糊和自然。