iOS CALayer介绍及简单实用
2020-10-20 本文已影响0人
tino又想吃肉了
1.CALayer -- 绘图层
- 在我们创建UIView时,会自动创建一个绘图层的实例--CALayer,然后再将需要展示的内容绘制到屏幕上。我们通过UIView的layer属性可以访问到这个层,并实现一些自定义的效果如框的粗细颜色、圆角、阴影等。
- 阴影:
self.view.layer.shadowOpacity = 1; // 阴影不透明度
self.view.layer.shadowOffset = CGSizeMake(10, 10); // 阴影偏移量
self.view.layer.shadowColor = [UIColor blackColor].CGColor; // 阴影颜色
self.view.layer.shadowRadius = 10; // 阴影圆角半径
- 圆角半径:
self.view.layer.cornerRadius = 75;
当圆角半径等于控件本身的半径(宽度的一半)时,就是一个圆 - 边框:
self.redView.layer.borderWidth = 3; // 边框宽度
self.redView.layer.borderColor = [UIColor redColor].CGColor;//边框颜色
2.使用CALayer实现形变
- 旋转
[UIView animateWithDuration:1 animations:^{
self.view.transform = CGAffineTransformMakeRotation(0.25 * M_PI);
}];
**其中的参数为需要旋转的角度,计算公式为 [度数 x / 180 * M_PI] **
- 缩放
[UIView animateWithDuration:1 animations:^{
self.view.transform = CGAffineTransformMakeScale(1, 2);
}];
参数为(宽放大的倍数,高放大的倍数)
- 移动
[UIView animateWithDuration:1 animations:^{
self.view.transform = CGAffineTransformMakeTranslation(100, 100);
}];
参数为水平和垂直移动的距离
还可以在第一个参数传入这三种形变的实例来实现叠加形变,如果传入的是自己,则实现的是连续形变。比如在旋转形变中传入自己,那么会实现一个持续转动的形变动画
- 还原形变: self.view.transform = CGAffineTransformIdentity;
3.使用CALayer实现自定义绘图
- 首先继承CALayer创建一个自定义的CALayer子类MyLayer
- 重写drawInContext方法
-(void)drawInContext:(CGContextRef)ctx {
// 设置颜色为蓝色
CGContextSetRGBFillColor(ctx, 0, 0, 1, 1);
// 设置起点
CGContextMoveToPoint(ctx, 50, 0);
// 从 (50, 0) 连线到 (0, 100)
CGContextAddLineToPoint(ctx, 0, 100);
// 从 (0, 100) 连线到 (100, 100)
CGContextAddLineToPoint(ctx, 100, 100);
// 合并路径,连接起点和终点
CGContextClosePath(ctx);
// 绘制路径
CGContextFillPath(ctx);
}
- 在需要绘制的view中创建MyLayer的实例
MyLayer *layer = [MyLayer layer];
// 设置层的宽高
layer.bounds = CGRectMake(0, 0, 100, 100);
// 设置层的位置
layer.position = CGPointMake(100, 100);
- 开始绘制:
[layer setNeedsDisplay];
- 显示到屏幕上:
[self.view.layer addSublayer:layer];