美文网首页
6.2 CALayer 的简单使用、自定义CALayer、代理绘

6.2 CALayer 的简单使用、自定义CALayer、代理绘

作者: 草根小强 | 来源:发表于2019-04-16 17:27 被阅读0次

    一: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

    相关文章

      网友评论

          本文标题:6.2 CALayer 的简单使用、自定义CALayer、代理绘

          本文链接:https://www.haomeiwen.com/subject/ytwbwqtx.html