zoukankan      html  css  js  c++  java
  • 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);
    }
    

    待续

  • 相关阅读:
    110. 平衡二叉树-前序遍历-简单
    207. 课程表-有向图判断有无环状-中等难度
    java错误集锦
    199. 二叉树的右视图-二叉树,dfs,从右往左遍历-中等难度
    114. 二叉树展开为链表-二叉树,dfs-中等难度
    236. 二叉树的最近公共祖先-中序遍历-中等难度
    Kendo ui 入门知识点
    Css样式压缩、美化、净化工具 源代码
    Linq与Lambda常用查询语法
    15个超强悍的CSS3圆盘时钟动画赏析
  • 原文地址:https://www.cnblogs.com/Ohero/p/4747646.html
Copyright © 2011-2022 走看看