UIView之所以能够显示,完全是因为内部的CALayer对象。因此,通过操作这个CALayer对象,可以很方便地调整UIView的一些界面属性,比如:阴影、圆角大小、边框宽度和颜色等。
UIView的使用比较简单,这里主要说说通过CALayer修改UIImageView的界面属性:
对于UIImageView,与UIView不同的是,它有两个图层,layer在主层,显示图片的为次层。
创建一个imageView,
UIImage image = [UIImage imageNamed:@“1.png”];
UIImageView imageView = [[UIImageView alloc] initWithImage:image];
imageView.center = CGPointMake(100, 100);
[self.view addSubview:imageView];
1)设置边框宽度和颜色
//边框是在图片的里面加上,占据图片的内容,图片内容减少,而UIView是在外面加边框
imageView.layer.borderWidth = 5;
imageView.layer.borderColor = [UIColor redColor].CGColor;
2)设置圆角大小
通过layer属性可以访问视图内部的CALayer对象
imageView.layer.cornerRadius = 10;
//maskToBounds=YES:超过主层边框的部分切掉,少了这个设置,UIImageView是不会有圆角效果的
imageView.layer.masksToBounds = YES;
注意,如果设置了maskToBounds=YES,那将不会有阴影效果
3)设置阴影
//设置阴影的颜色为灰色,注意,这里使用的是UIColor的CGColor属性,是一种CGColorRef类型的数据
imageView.layer.shadowColor = [UIColor grayColor].CGColor;
//设置阴影的偏移大小,可以看出阴影往原图的右下角偏移
imageView.layer.shadowOffset = CGSizeMake(10, 10);
//设置阴影的不透明度为0.5,表示半透明。如果为1,代表完全不透明。
imageView.layer.shadowOpacity = 0.5;
4)设置旋转
//transform是一个结构体,M_PI_4表示四分之π,顺时针旋转45°,后面的(1, 1, 0),绕着连接原点和(1,1)的轴旋转,修改这个向量可以做一些三维旋转效果,你可以随便改个值试一下,比如(0, 0, 1)表示Z轴这个向量
imageView.layer.transform = CATransform3DMakeRotation(M_PI_4, 0, 0, 1);
UIView可以通过addSubview:方法添加子视图,类似地,CALayer可以通过addSublayer:方法添加子层
还可以通过KVC设置旋转,
NSvalue *value = [NSValue valueWithCATransform3D:CATransform3DMackRotation(M_PI_4, 1, 1, 0)];
[imageView.layer setValue: value forKeyPath:"transform"];
如果仅仅二维旋转,可以这样:
[imageView.layer setValue: @(M_PI_4) forKeyPath:"transform.rotation"];
如果缩放,
[imageView.layer setValue: @(0.5) forKeyPath:"transform.scale.x"];