IOS CALayer详解

来源:互联网 发布:linux守护线程 编辑:程序博客网 时间:2024/06/05 13:42

在IOS中CALayer是一个很常用到的东西,每个UIView都有CALayer,即 UIView.layer。CALayer能够对 UIView做许多设定,如:阴影,圆角和透明等效果。

CALayer直接从NSObject继承,因为缺少了UIResponder类的支持,所以CALayer不能响应任何用户事件。而UIView是对CALayer的高级则实现和封装。
每一个UIView都有一个CALayer,其所有视觉效果都是在这个layer上进行的。可以认为UIView处理用户事件的,而CALayer注重的则是显示效果。
CALayer是属于QuartzCore framework的,所以使用CALayer需要引入QuartzCore framework,且需要引用QuartzCore/QuartzCore.h。
示例如下:
折叠C/C++ Code复制内容到剪贴板
  1. #import <QuartzCore/QuartzCore.h>  
  2. -(void)ViewDidLoad  
  3. {  
  4. //首先配置view的layer属性,展示一个带圆角的层。  
  5. self.view.layer.backgroundColor =[UIColor orangeColor].CGColor;  
  6. self.view.layer.cornerRadius =20.0;  
  7. self.view.layer.frame = CGRectInset(self.view.layer.frame, 20, 20);  
  8. //再添加一个带阴影效果的子层  
  9. CALayer *sublayer = [CALayer layer];  
  10. sublayer.backgroundColor = [UIColor blueColor].CGColor;  
  11. sublayer.shadowOffset = CGSizeMake(0, 3);  
  12. sublayer.shadowRadius = 5.0;  
  13. sublayer.shadowColor = [UIColor blackColor].CGColor;  
  14. sublayer.shadowOpacity = 0.8;  
  15. sublayer.frame = CGRectMake(30, 30, 128, 192);  
  16. [self.view.layer addSublayer:sublayer];  
  17. //为子层增加内容(图片),你还可以设置层的边框,代码如下:  
  18. sublayer.contents =(id)[UIImage imageNamed:@"tekuba_net.png"].CGImage;  
  19. sublayer.borderColor =[UIColor blackColor].CGColor;  
  20. sublayer.borderWidth =2.0;  
  21. }  
//我们可能需要视图有圆角和阴影的效果,你可能说很容易设置cornerRadius属性就行。实际上你即算是设置了cornerRadius属性,图片仍然不会显示圆角。因为如果是这样,这个层的阴影显示就没有了。简单的实现方式是通过两个层来实现
//配置子视图为阴影
CALayer *sublayer =[CALayer layer];
sublayer.backgroundColor =[UIColor blueColor].CGColor;
sublayer.shadowOffset = CGSizeMake(0, 3);
sublayer.shadowRadius =5.0;
sublayer.shadowColor =[UIColor blackColor].CGColor;
sublayer.shadowOpacity =0.8;
sublayer.frame = CGRectMake(30, 30, 128, 192);
sublayer.borderColor =[UIColor blackColor].CGColor;
sublayer.borderWidth =2.0;
sublayer.cornerRadius =10.0;
[self.view.layer addSublayer:sublayer];
//在子层上添加一个圆角视图
CALayer *imageLayer =[CALayer layer];
imageLayer.frame = sublayer.bounds;
imageLayer.cornerRadius =10.0;
imageLayer.contents =(id)[UIImage imageNamed:@"tekuba_net.png"].CGImage;
imageLayer.masksToBounds =YES;
[sublayer addSublayer:imageLayer];

下面就逐个过下 CALayer 的一些重要属性:
shadowPath : 设置CALayer背景位置
shadowOffset : shadow 的大小
shadowOpacity : shadow的透明效果
shadowRadius : shadow的渐变距离,从外围开始,往里渐变 shadowRadius 距离
masksToBounds : 很重要的属性,可以用此属性来防止子元素大小溢出父元素,如若防止溢出,请设为 true。决定子layer是否被当前layer的边界剪切
borderWidth 和 boarderColor : 边框颜色和宽度,很常用
opacity : UIView 的透明效果
cornerRadius : UIView 的圆角
0 0
原创粉丝点击