• iOS之 重绘机制


    最近在看Core Animation , 今天来谈谈CALayer 和 UIView 中的重绘的一些认识:

    我们都知道UIView里面有个成员layer,利用这个这个layer我们可以设置一些圆角,阴影什么的,或者

    self.view.layer.contents = (__bridge id)([UIImage imageNamed:@"calayer_bg"].CGImage);
    

     在这里我就不过多的阐述UIView和CALayer的异同了。

    创建一个CALayer的一个子类CustomLayer,重写

    @implementation CustomLayer
    
    // 重写该方法,在该方法内绘制图形
    - (void)drawInContext:(CGContextRef)ctx{
    //     画一个圆
        CGContextAddEllipseInRect(ctx, CGRectMake(50, 50, 100, 100));
        // 设置属性
        CGContextSetRGBFillColor(ctx, 0, 0, 1, 1);
        // 渲染
        CGContextFillPath(ctx);
    }
    
    @end

    然后再某个VC上进行使用

        .....
    
        CustomLayer *layer = [CustomLayer layer];
        // 设置layer的属性
        layer.backgroundColor = [UIColor brownColor].CGColor;
        layer.bounds = CGRectMake(0, 0, 200, 200) ;
        layer.anchorPoint = CGPointZero;
        layer.position = CGPointMake(100, 100);
        layer.cornerRadius = 20;
        layer.shadowColor = [UIColor blackColor].CGColor;
        layer.shadowOffset = CGSizeMake(10, 20);
        layer.shadowOpacity = 0.6;
        [layer setNeedsDisplay];
        [self.view.layer addSublayer:layer];
        ......
    

     在自定义layer中的-(void)drawInContext:方法不会自己调用,只能自己通过setNeedDisplay方法调用.

    在view中画东西drawRect:方法在view第一次显示的时候会自动调用。

    上面是第一种方法使得layer重绘。其实还有方法二,就是 设置layer的delegate为VC,在VC上实现

    - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx,我们这个时候在CustomLayer不需要再去重写 -(void) drawInContext:

    - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx{
        CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 100, 100));
        CGContextSetRGBFillColor(ctx, 0, 1, 1, 1);
        CGContextFillPath(ctx);
    }
    

    待续

  • 相关阅读:
    robotframework +selenium 自动化测试之浏览器与驱动的兼容问题。
    robotframework+selenium自动化robotramework版本问题
    一个业务逻辑引发的对多表连接的思考
    第一次接触WebSocket遇到的坑以及感受
    关于读写APP.config文件能读却写不了的问题
    poj2392 space elevator
    洛谷P1197 星球大战
    poj3421&poj3292&poj2689 基础数论
    洛谷P1006 传纸条
    挑战程序设计竞赛2.3节习题选解
  • 原文地址:https://www.cnblogs.com/Ohero/p/4747646.html
Copyright © 2020-2023  润新知