在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮、一个文本框、一个Label,一 个图片等等,
其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层layer, 当我们创建UIView是系统会自动的在创建一个图层(CALayer), 当UIView需要显示到屏幕上时,会调用drawRect方法进行绘图,并且会将所有内容绘制在自己的图层 上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示, 所以通过操作CALayer可以方便的调整UIView的外观, 比如阴影效果, 圆角效果等, 也可以给layer添加动画来实现一些炫酷的效果. 下面是CALayer 的常见属性:
@property (strong, nonatomic) UIWindow *window;
@property CGFloat borderWidth;
@property CGColorRef borderColor;
@property CGColorRef backgroundColor;
@property float opacity;
@property CGColorRef shadowColor;
@property float shadowOpacity;
@property CGSize shadowOffset;
@property CGFloat shadowRadius;
@property(strong) id contents;
@property CGFloat cornerRadius;
@property CGRect bounds;
@property CGPoint position;
@property CGPoint anchorPoint;
@property CATransform3D transform;
@property(getter=isHidden) BOOL hidden;
@property(readonly) CALayer *superlayer;
@property(copy) NSArray *sublayers;
@property BOOL masksToBounds;
根据以上属性我们就可以做出不同的效果,首先创建一个myView, 然后设置myView的各种效果
//线宽。不会改变容器的大小
self.myView.layer.borderWidth = 6;
//边框的颜色 类型是CGColorRef
self.myView.layer.borderColor = [UIColor redColor].CGColor;
//设置圆角---相当于设置了剪裁区域
self.myView.layer.cornerRadius = 50;
//设置透明度[0-1],默认值1不透明
self.myView.layer.opacity = 0.5;
//CALayer 属于QuartzCore框架,可以跨平台(OSX和iOS)
//如果CALayer的属性依赖于UIKit框架,就无法跨平台
self.myView.layer.contents = (id)[UIImage imageNamed:@"1.jpg"].CGImage;
//设置剪裁,超过剪裁区域的内容会被减掉
self.myView.layer.masksToBounds = YES;
//设置阴影--不能和设置剪裁一起使用,否则会把阴影剪裁掉
//阴影的颜色
self.myView.layer.shadowColor = [UIColor grayColor].CGColor;
//设置阴影的偏移
self.myView.layer.shadowOffset = CGSizeMake(20, -20);
//阴影的透明度 默认值是0 完全透明--必须设置的
self.myView.layer.shadowOpacity = 1;
//阴影的模糊程度
self.myView.layer.shadowRadius = 2;
//设置阴影的范围,不能和shadowOffset一起使用
UIBezierPath *path = [UIBezierPath bezierPathWithRect:CGRectMake(-20, -20, 240, 240)];
self.myView.layer.shadowPath = path.CGPath;