1.CALayer簡介:
CALayer我們稱它叫做層.在每個UIView內(nèi)部都有一個layer這樣的屬性.
UIView之所以能夠顯示,就是因為它有這個的一個層,才具有顯示的功能.我們通過操作CALayer對象,可以很方便地調(diào)整UIView的一些外觀屬性.可以給UIView設(shè)置陰影,圓,邊框等等...
2.操作layer改變UIView外觀.
2.1.設(shè)置陰影
默認圖層是有陰影的,只不過是透明的_RedView.layer.shadowOpacity = 1;
設(shè)置陰影的圓
_RedView.layer.shadowRadius =10;設(shè)置陰影的顏色,把UIKit轉(zhuǎn)換成CoreGraphics框架,CG開頭_RedView.layer.shadowColor = [UIColor blueColor].CGColor;
2.2.設(shè)置邊框
設(shè)置圖層邊框,在圖層中使CoreGraphics的CGColorRef_RedView.layer.borderColor = [UIColor whiteColor].CGColor;
_RedView.layer.borderWidth = 2;
2.3.設(shè)置圓
圖層的圓的半徑,圓的半徑為寬度的一半,就是這個圓_RedView.layer.cornerRadius = 50;
3.操作layer改變UIImageView的外觀.
3.1.設(shè)置圖形邊框
_imageView.layer.borderWidth = 2;
_imageView.layer.borderColor = [UIColor whiteColor].CGColor;
3.2設(shè)置圖片的圓角半徑
_imageView.layer.cornerRadius = 50;
裁剪,超出裁剪區(qū)域的部分全部裁剪掉
_imageView.layer.masksToBounds = YES;注意:UIImageView當(dāng)中Image并不是直接添加在層上面的.這是添加在layer當(dāng)中的contents.我們設(shè)置層的所有屬性它只作用在層上.對contents的東西并不起作用.所以我們看不到圖片有圓角的效果.
想要讓圖片有圓角的效果.可以把masksToBounds這個屬性設(shè)為YES,當(dāng)設(shè)為YES,把就會把超過根層以外的東西都給裁剪掉.
4.layer的CATransform3D屬性.
只有旋轉(zhuǎn)的時候才可以看出3D的效果.
旋轉(zhuǎn)
x,y,z分別代表x,y,z軸.CATransform3DMakeRotation(M_PI, 1, 0, 0);平移
CATransform3DMakeTranslation(x,y,z)
縮放
CATransform3DMakeScale(x,y,z);
可以通過KVC的方式進行設(shè)置屬性.
但是CATransform3DMakeRotation它的值,是一個結(jié)構(gòu)體,所以要把結(jié)構(gòu)轉(zhuǎn)成對象.
NSValue *value = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 1, 0, 0)];[_imageView.layer setValue:value forKeyPath:@"transform.scale"];
什么時候KVC?
當(dāng)需要做一些快速縮放,平移,二維的旋轉(zhuǎn)時KVC.
如: [_imageView.layer setValue:@0.5 forKeyPath:@"transform.scale"];快速的進行縮放.后forKeyPath屬性值不是亂寫的.蘋果官方文檔當(dāng)中給了相關(guān)的屬性.
5.自定義Layer
5.1.如何自定義Layer.
定義CALayer的方式創(chuàng)建UIView的方式非常相似.CALayer *layer = [CALayer layer];
layer.frame = CGRectMake(50, 50, 100, 100);layer.backgroundColor = [UIColor redColor].CGColor;[self.view.layer addSublayer:layer];
給layer設(shè)置圖層.
layer.contents = (id)[UIImage imageNamed:@"阿貍頭像"].CGImage;
5.2.關(guān)于CALayer的疑惑? 為什么要使CGImageRef琢感、CGColorRef?
首先
CALayer是定義在QuartzCore框架中的
CGImageRef暴氏、CGColorRef兩種數(shù)據(jù)類型是定義在CoreGraphics框架中的
UIColor杨拐、UIImage是定義在UIKit框架中的
其次
QuartzCore框架和CoreGraphics框架是可以跨平臺使用的匾荆,在iOS和Mac OS X上都能使用
但是UIKit只能在iOS中使用
為了保證可移植性息尺,QuartzCore不能使用UIImage硝清、UIColor,只能使用CGImageRef蝌蹂、CGColorRef
5.3.UIView和CALayer都能夠顯示東西,該怎樣選擇?
對CALayer许饿,UIView多了一個事件處理的功能噩凹。也就是說巴元,CALayer不能處理用戶的觸摸事件,UIView可以
如果顯示出來的東西需要跟用戶進行交互的話栓始,UIView;
如果不需要跟用戶進行交互务冕,UIView或者CALayer都可以,CALayer的性能會 好些幻赚,因為它少了事件處理的功能禀忆,更加輕量級
6.position和anchorPoint
position和anchorPoint是CALayer的兩個屬性臊旭。
我們以前修改一個控件的位置都是通過Frame的方法進行修改,現(xiàn)在利用CALayer的position和anchorPoint屬性也能夠修改控件的位置箩退。這兩個屬性是配合使用的
position:它是用來設(shè)置當(dāng)前的layer在父控件當(dāng)中的位置的离熏。所以它的坐標(biāo)原點以父控件的左上角(0.0)點。
anchorPoint:它是取決于CALayer身上哪一點會在position屬性所指的位置的anchorPoint:它是以當(dāng)前的layer左上角為原點(0.0)戴涝。它的取值范圍是0~1滋戳,它的默認在中間也就是(0.5.0.5)的位置
anchorPoint又稱錨點,就是把錨點定到pisition所指的位置
兩者結(jié)合使用啥刻。想要修改某個控件的位置奸鸯。我們可以設(shè)置它的position。設(shè)置完畢后可帽。layer身上的anchorPoint會自動定到position所在的位置