6.2 CALayer 的简单使用、自定义CALayer、代理绘制图层、动画属性

一:CALayer 的简单使用

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    // 1.CALayer 的简单使用
    [self useCALayer];
}
- (void)useCALayer
{
    UIImage *image = [UIImage imageNamed:@"11.png"];
    //    NSString *path = [[NSBundle mainBundle] pathForResource:@"11" ofType:@"png"];
    //    UIImage  *image = [UIImage imageWithContentsOfFile:path];
    UIImageView *  imageView  = [[UIImageView alloc] initWithFrame:CGRectMake(50, 200, 300, 300)];
    imageView.image = image;
    
    [self.view addSubview:imageView];
    
    // 1.设置圆角
    // 让所有的图层跟随父图层改变
    //    [imageView.layer setMasksToBounds:YES];
    //    [imageView.layer setCornerRadius:150];
    //
        // 2. 设置边框
        // 2.1 设置边框的宽度
        //    [imageView.layer setBorderWidth:2.0];
        //    // 2.2 设置边框的颜色
//            [imageView.layer setBorderColor:[UIColor redColor].CGColor];
    
        // 3.设置阴影效果(如果使用阴影效果,setMasksToBounds 不能设置成YES,必须同时指定颜色、偏移量、透明度)
        // 3.1 设置阴影效果的偏移量
        [imageView.layer setShadowOffset:CGSizeMake(10, 10)];
        // 3.2 设置阴影效果的颜色
        [imageView.layer setShadowColor:[UIColor yellowColor].CGColor];
        // 3.3 设置阴影效果的透明度
        [imageView.layer setShadowOpacity:1.0];
}
11.png

二:自定义CALayer

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    // 2.自定义CALayer
    [self diyCALayer];

}
- (void)diyCALayer
{
    // 1. 获取一个图层对象
    _layer = [CALayer layer];
    
    // 2. 设置图层的属性
    _layer.frame = CGRectMake(0, 0, 300, 300);
    // 2.1 大小
//        _layer.bounds = CGRectMake(300, 300, 300, 300);
    // 2.2 位置
//        _layer.position = CGPointMake(0, 0);
    // 2.3 设置颜色
    _layer.backgroundColor = [UIColor purpleColor].CGColor;
    // 2.4 设置锚点(大小 :0~ 1) 默认的是0.5
    //    layer.anchorPoint = CGPointMake(0.5, 0.5);
    
    // 2.5 设置图片
    UIImage *image = [UIImage imageNamed:@"11"];
    _layer.contents = (id)[image CGImage];
    
    
    // 3. 把自定义图层添加到父图层
    [self.view.layer addSublayer:_layer];
}
自定义CALayer.png

代理绘制图层

- (void)viewDidLoad {
    // 3.代理绘制图层
//    [self drawLayerWithDelegate];
}
- (void)drawLayerWithDelegate
{
    // 1. 创建一个Layer
    CALayer *layer = [CALayer layer];
    layer.frame = CGRectMake(0, 0, 300, 300);
    layer.delegate = self;
    [self.view.layer addSublayer:layer];
    
    // 3. 触发代理方法 setNeedsDisplay:重新绘制当前图层的视图
    [layer setNeedsDisplay];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    if (_layer.anchorPoint.x == 0.5) {
        _layer.anchorPoint = CGPointMake(1.0, 1.0);
    }else
    {
        _layer.anchorPoint = CGPointMake(0.5, 0.5);
    }
}
// 2. 实现代理方法
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
    // 2.1设置绘制大小
    CGRect frame = CGRectMake(20, 20, 100, 100);
    // 2.2 添加路径
    CGContextAddRect(ctx, frame);
    // 2.3 设置属性
    CGContextSetRGBFillColor(ctx, 1.0, 0.0, 0.0, 1.0);
    
    // 2.4 绘制
    CGContextDrawPath(ctx, kCGPathFillStroke);
}
自定义CALayer.png

理绘制图层

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    // 3.代理绘制图层
    [self drawLayerWithDelegate];
}
// 2. 实现代理方法
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
    // 2.1设置绘制大小
    CGRect frame = CGRectMake(20, 20, 100, 100);
    // 2.2 添加路径
    CGContextAddRect(ctx, frame);
    // 2.3 设置属性
    CGContextSetRGBFillColor(ctx, 1.0, 0.0, 0.0, 1.0);
    
    // 2.4 绘制
    CGContextDrawPath(ctx, kCGPathFillStroke);
}

代理绘制图层.png

动画属性

#import "ViewController.h"

@interface ViewController ()
{
    CALayer *_layer;
    NSArray *_array;
}
@end
#动画属性
@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 1. 定义一个图层
    _layer = [CALayer layer];
    _layer.frame = CGRectMake(0, 0, 200, 200);
    _layer.backgroundColor = [UIColor orangeColor].CGColor;
    [self.view.layer addSublayer:_layer];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = touches.anyObject;
    CGPoint point = [touch locationInView:self.view];
    
    // 设置layer随着手指点击的位置移动
    // 设置位置
    _layer.position = point;
    // 设置颜和透明度
    _layer.backgroundColor = [UIColor colorWithRed:arc4random() % 255 / 255.f green:arc4random() % 255 / 255.f blue:arc4random() % 255 / 255.f alpha:arc4random() % 255 / 255.f + 0.4].CGColor;
    // 设置旋转
    CGFloat angle = arc4random() % 180 / M_PI * 180;
    _layer.transform = CATransform3DMakeRotation(angle, 0, 0, 1);
    
    // 设置圆角
    _layer.cornerRadius = arc4random() % 200;
}


@end

动画属性.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容