一、什么是CALayer
* 在iOS系統中,你能看得見摸得着的東西基本上都是UIView,比如一個按鈕、一個文本標簽、一個文本輸入框、一個圖標等等,這些都是UIView。
* 其實UIView之所以能顯示在屏幕上,完全是因為它內部的一個層。
* 在創建UIView對象時,UIView內部會自動創建一個層(即CALayer對象),通過UIView的layer屬性可以訪問這個層。當UIView需要顯示到屏幕上時,會調用drawRect:方法進行繪圖,並且會將所有內容繪制在自己的層上,繪圖完畢后,系統會將層拷貝到屏幕上,於是就完成了UIView的顯示。
* 換句話說,UIView本身不具備顯示的功能,是它內部的層才有顯示功能。
二、CALayer的簡單使用
上面已經說過了,UIView之所以能夠顯示,完全是因為內部的CALayer對象。因此,通過操作這個CALayer對象,可以很方便地調整UIView的一些界面屬性,比如:陰影、圓角大小、邊框寬度和顏色等。
1.CALayer是被定義在QuartzCore框架中的,因此要想使用CALayer,先導入QuartzCore框架
1> 點擊項目名稱,然后點擊右邊TARGETS下面的target
2> 點擊Build Pases后,展開Link Binary....,添加 + 號
3> 在搜索框中輸入"Quartz",選中QuartzCore.framework,最后add添加
4> 添加完畢后,這個框架就會出現在項目文件夾中
如果你覺得位置不好看,還可以將它拖到Frameworks文件夾下,跟其他框架放一起
2.在項目代碼中導入QuartzCore框架的主頭文件
#import <QuartzCore/QuartzCore.h>
3.通過CALayer修改UIImageView的界面屬性
你也可以使用UIButton或者UILabel,這里就以UIImageView為例子
1> 先創建一個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> 設置陰影
1 imageView.layer.shadowColor = [UIColor grayColor].CGColor; 2 imageView.layer.shadowOffset = CGSizeMake(10, 10); 3 imageView.layer.shadowOpacity = 0.5;
* 第1行設置陰影的顏色為灰色,注意,這里使用的是UIColor的CGColor屬性,是一種CGColorRef類型的數據
* 第2行設置陰影的偏移大小,可以看出陰影往原圖的右下角偏移
* 第3行設置陰影的不透明度為0.5,表示半透明。如果為1,代表完全不透明。
3> 設置圓角大小
通過layer屬性可以訪問視圖內部的CALayer對象
1 imageView.layer.cornerRadius = 10; 2 imageView.layer.masksToBounds = YES;
* 第1行設置圓角半徑為10
* 第2行的maskToBounds=YES:可以看做是強制內部的所有子層支持圓角效果,少了這個設置,UIImageView是不會有圓角效果的
* 注意,如果設置了maskToBounds=YES,那將不會有陰影效果
4> 設置邊框寬度和顏色
1 imageView.layer.borderWidth = 5; 2 imageView.layer.borderColor = [UIColor redColor].CGColor;
* 第1行設置邊框寬度為5
* 第2行設置邊框顏色為紅色
5> 設置旋轉
imageView.layer.transform = CATransform3DMakeRotation(M_PI_4, 0, 0, 1);
* 利用transform屬性可以設置旋轉、縮放等效果
* M_PI_4表示四分之π,順時針旋轉45°
* 后面的(0, 0, 1)表示Z軸這個向量,修改這個向量可以做一些三維旋轉效果,你可以隨便改個值試一下,比如(1, 1, 1)
* 總體的意思是layer會繞着Z軸順時針旋轉45°,也就是在x、y平面進行旋轉