美文网首页
第2章 寄宿图

第2章 寄宿图

作者: cdd48b9d36e0 | 来源:发表于2018-09-08 22:26 被阅读0次

    CALayer中包含的图就叫寄宿图,其中有个contents属性就是专门用来存放图片的

    2.1 contents

    CALayer UIView 说明
    contentGravity contentMode 和cotentMode一样,contentsGravity的目的是为了决定内容在图层的边界中怎么对齐,也就是拉伸方式;contentGravity 的值是字符串常量,contentMode的值是枚举
    contentsScale Retina 屏以前为1.0,Retina 屏为2.0,Plus机型为3.0,CATextLayer就经常需要设置layer.contentsScale = [UIScreen mainScreen].scale来让文字在不同屏幕下保证清晰
    maskToBounds clipsToBounds 是否显示超出边界的内容
    contentsRect 裁剪图片用的,使用的坐标是单位(IOS的三种坐标系统:点、像素、单位),默认的contentsRect是{0, 0, 1, 1}
    contentsCenter 与UIImage 的resizableImageWithCapInsets:类似 设置拉伸区域用的,默认的contentsCenter是{0, 0, 1, 1},常见用法是设置为{0.25, 0.25, 0.5, 0.5},原理就是很简单见原文的图示;另外这个属性可以在IB里直接设置

    2.2 Custom Drawing

    给图层的contents赋CGImage的值不是唯一的设置寄宿图的方法。我们也可以像-drawRect:方法那样用图层自己的绘图方法来自定义绘制,而drawRect事实上也是让底层的CALayer安排了重绘工作和保存了因此产生的图片

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        CALayer *blueLayer = [CALayer layer];
        blueLayer.frame = CGRectMake(50.0f, 50.0f, 100.0f, 100.0f);
        blueLayer.backgroundColor = [UIColor blueColor].CGColor;
        
        ////让图层自绘制有三步:
        //第一步:设置代理,并遵循协议
        blueLayer.delegate = self;
        
        blueLayer.contentsScale = [UIScreen mainScreen].scale;
        
        [self.layerView.layer addSublayer:blueLayer];
        
        //第二步:和UIView的drawRect不同,CALayer要自己手动开启重绘方法
        [blueLayer display];
    }
    //第三步:实现代理。
    - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
    {
        //draw a thick red circle
        CGContextSetLineWidth(ctx, 10.0f);
        CGContextSetStrokeColorWithColor(ctx, [UIColor redColor].CGColor);
        CGContextStrokeEllipseInRect(ctx, layer.bounds);
    }
    

    另外一点与UIView的重绘不同的是,CALayer就算你没有设置masksToBounds,绘制的内容也不会超出边界

    相关文章

      网友评论

          本文标题:第2章 寄宿图

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