首先对CALayer进行简单的介绍:
1.在UIView中,CALayer只是一个类的声明,因此需要添加 QuartzCore框架
2.UIKit框架只能应用到ios中,但是Quartz2D是跨平台的,因此在使用颜色时应该将UIColor转换成CGColor
3.修改图层相当于修改了UIView属性,即修改了界面属性
4.形变属性既可以使用形变函数制定,也可以使用keypath制定
创建imageView并设置边框属性(基础)
1.bounds:宽度和高度,x y设置为0;
2.position:位置(默认指中心点,具体由anchorPoint决定)
3.anchorPoint:锚点,(x,y的范围都是0~1),决定了position的含义
4.backgroundColor:背景颜色(CGColorRef 类型)
5.borderColor:边框颜色
6.borderWidth:边框宽度
7.borderRadius:圆角半径
8.contents:内容
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(90, 90, 90, 90)];
imgView.backgroundColor = [UIColor redColor];
imgView.image = [UIImage imageNamed:@"1.jpg"];
[self.view addSubview:imgView];
//1.获取layer设置边框
imgView.layer.borderWidth = 1;
imgView.layer.borderColor = [UIColor darkGrayColor].CGColor;
// 2.设置弧度
imgView.layer.cornerRadius = 45;
imgView.layer.masksToBounds = YES;
imgView.clipsToBounds = YES;
//3.设置阴影
//如果设置imgView.layer.masksToBounds = YES; 则不会出现阴影
imgView.layer.shadowColor = [UIColor redColor].CGColor;
imgView.layer.shadowOffset = CGSizeMake(5, 5);
imgView.layer.shadowOpacity = 0.5;
//对imgView的layer层的transform 属性进行操作(第一种方法)
//平移
imgView.layer.transform = CATransform3DMakeTranslation(0, 200, 0);
//旋转
imgView.layer.transform = CATransform3DMakeRotation(M_PI_4, 1, 0, 0);
//缩放
imgView.layer.transform = CATransform3DMakeScale(2, 2, 1);
//对imgView的layer层的transform 属性进行操作(第二种方法)通过kvc的方法
//平移
[imgView.layer setValue:@100 forKeyPath:@"transform.translation.x"];
//旋转
[imgView.layer setValue:@M_PI_2 forKeyPath:@"transform.rotation.z"];
//缩放
[imgView.layer setValue:@0.5 forKeyPath:@"transform.scale.x"];
CALayer的基本属性
//创建图层
CALayer *subLayer = [[CALayer alloc] init];
//将图层添加到view的根图层上
[self.view.layer addSublayer:subLayer];
//----------常用的属性----------
//设置图层的大小
subLayer.bounds = CGRectMake(0, 0, 200, 200);
//设置图层的显示位置
subLayer.position = CGPointMake(100, 100);
//设置背景颜色
subLayer.backgroundColor = [UIColor redColor].CGColor;
//设置锚点
//决定了position的含义,x和y的范围是0~1
subLayer.anchorPoint = CGPointMake(0.5, 0.5);
//设置图层显示的内容
UIImage *img = [UIImage imageNamed:@"1.jpg"];
subLayer.contents = (id)img.CGImage;
CALayer中的隐式动画(隐式动画的默认时间为0.25秒)
每一个UIView内部都默认关联着一个CALayer,称这个layer为Root Layer;
所有的非Root Layer都存在着隐式动画,默认时长为1/4秒
bounds:缩放动画
position:平移动画
opacity:淡入淡出的动画(改变透明度)
更多的隐式动画属性可在文档中搜索
使用CALayer绘图,会调用自己的drawRect方法
//点击界面触触发的方法
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
//隐式动画的时间:0.25秒
//如果不想存在动画
//关闭动画
// [CATransaction begin];
// [CATransaction setDisableActions:YES];
//取得点击的坐标
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView:self.view];
//1.修改layer的位置
_layer.position = point;
//2、改变layer的大小
CGFloat num = arc4random_uniform(50) + 30;
_layer.bounds = CGRectMake(0, 0, num, num);
//3、修改layer的透明度
_layer.opacity = arc4random_uniform(10)*0.1;
//4、背景颜色
_layer.backgroundColor = [UIColor colorWithRed:arc4random_uniform(10)*0.1 green:arc4random_uniform(10)*0.1 blue:arc4random_uniform(10)*0.1 alpha:1].CGColor;
//5、设置边框的弧度
_layer.cornerRadius = arc4random_uniform(20);
//6、transform
_layer.transform = CATransform3DMakeScale(2, 1, 1);
//提交
[CATransaction commit];
}