一、什么是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的簡(jiǎn)單使用
上面已經(jīng)說過了,,UIView之所以能夠顯示,,完全是因?yàn)閮?nèi)部的CALayer對(duì)象。因此,,通過操作這個(gè)CALayer對(duì)象,,可以很方便地調(diào)整UIView的一些界面屬性,,比如:陰影、圓角大小,、邊框?qū)挾群皖伾取?/span>
1.CALayer是被定義在QuartzCore框架中的,因此要想使用CALayer,,先導(dǎo)入QuartzCore框架
1> 點(diǎn)擊項(xiàng)目名稱,然后點(diǎn)擊右邊TARGETS下面的target
2> 點(diǎn)擊Build Pases后,展開Link Binary....,,添加 + 號(hào)
3> 在搜索框中輸入"Quartz",選中QuartzCore.framework,,最后add添加
4> 添加完畢后,,這個(gè)框架就會(huì)出現(xiàn)在項(xiàng)目文件夾中
如果你覺得位置不好看,還可以將它拖到Frameworks文件夾下,,跟其他框架放一起
2.在項(xiàng)目代碼中導(dǎo)入QuartzCore框架的主頭文件
#import <QuartzCore/QuartzCore.h>
3.通過CALayer修改UIImageView的界面屬性
你也可以使用UIButton或者UILabel,,這里就以UIImageView為例子
1> 先創(chuàng)建一個(gè)UIImageView,,添加到控制器的view中
1 UIImage *image = [UIImage imageNamed:@"lufy.png"];
2 UIImageView *imageView = [[[UIImageView alloc] initWithImage:image] autorelease];
3 imageView.center = CGPointMake(100, 100);
4 [self.view addSubview:imageView];
2> 設(shè)置陰影
1 imageView.layer.shadowColor = [UIColor grayColor].CGColor;
2 imageView.layer.shadowOffset = CGSizeMake(10, 10);
3 imageView.layer.shadowOpacity = 0.5;
* 第1行設(shè)置陰影的顏色為灰色,,注意,,這里使用的是UIColor的CGColor屬性,,是一種CGColorRef類型的數(shù)據(jù)
* 第2行設(shè)置陰影的偏移大小,可以看出陰影往原圖的右下角偏移
* 第3行設(shè)置陰影的不透明度為0.5,表示半透明,。如果為1,代表完全不透明,。
3> 設(shè)置圓角大小
通過layer屬性可以訪問視圖內(nèi)部的CALayer對(duì)象
1 imageView.layer.cornerRadius = 10;
2 imageView.layer.masksToBounds = YES;
* 第1行設(shè)置圓角半徑為10
* 第2行的maskToBounds=YES:可以看做是強(qiáng)制內(nèi)部的所有子層支持圓角效果,,少了這個(gè)設(shè)置,,UIImageView是不會(huì)有圓角效果的
* 注意,,如果設(shè)置了maskToBounds=YES,那將不會(huì)有陰影效果
4> 設(shè)置邊框?qū)挾群皖伾?/span>
1 imageView.layer.borderWidth = 5;
2 imageView.layer.borderColor = [UIColor redColor].CGColor;
* 第1行設(shè)置邊框?qū)挾葹?
* 第2行設(shè)置邊框顏色為紅色
5> 設(shè)置旋轉(zhuǎn)
imageView.layer.transform = CATransform3DMakeRotation(M_PI_4, 0, 0, 1);
* 利用transform屬性可以設(shè)置旋轉(zhuǎn),、縮放等效果
* M_PI_4表示四分之π,,順時(shí)針旋轉(zhuǎn)45°
* 后面的(0, 0, 1)表示Z軸這個(gè)向量,,修改這個(gè)向量可以做一些三維旋轉(zhuǎn)效果,你可以隨便改個(gè)值試一下,比如(1, 1, 1)
* 總體的意思是layer會(huì)繞著Z軸順時(shí)針旋轉(zhuǎn)45°,,也就是在x,、y平面進(jìn)行旋轉(zhuǎn)
|