CALayer1-簡介


一、什么是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平面進行旋轉


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM