美文网首页
CALayer----寄宿图

CALayer----寄宿图

作者: M_PI_4 | 来源:发表于2018-04-30 00:05 被阅读0次

    寄宿图

    • 什么是寄宿图

    图层中包含的 View

    1. contents 属性

    contents

    1> CALayer 的属性之一
    2> 该属性的类型 id
    3> 可赋给该属性CGImage,用以展示图片


    类型转化问题

    形如:

    layer.contents = (__bridge id)image.CGImage;

    • UIImage: 存在CGImage属性(Cocoa下对象),返回“CGImageRef”,返回的是CoreFundation下的类型,因此需要类型转化一下
    • __bridge: 只有非ARC下才不需要转化

    • 代码示例:
    #import "ViewController.h"
    
    @interface ViewController ()
    @property (weak, nonatomic) IBOutlet UIView *layerView;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        UIImage *image = [UIImage imageNamed:@"li"];
        self.layerView.layer.contents = (__bridge id)image.CGImage;
        self.layerView.layer.cornerRadius = 5.0f;
        self.layerView.layer.borderWidth = 2.0f;
        self.layerView.layer.borderColor = [UIColor grayColor].CGColor;
        self.layerView.layer.masksToBounds = YES;
    }  
    
    • 效果示意:


      contents图

    contentGravity

    从上面的效果来看,图片是有一些变形的,right??

    • UIView 层初级改良:
    //Scale:拉伸图片
    //    Aspect:图片长宽的比例,保持图形的长宽比,保持图片不变形。
    //    Aspect Fill:在保持长宽比的前提下,缩放图片,使图片充满容器。
    //    Aspect Fit:在保持长宽比的前提下,缩放图片,使得图片在容器内完整显示出来。
    //    Scale to Fill: 缩放图片,使图片充满容器。图片未必保持长宽比例协调,有可能会拉伸至变形
        self.layerView.contentMode = UIViewContentModeScaleAspectFit;  
    
    初级改良
    • 图层 层面改进
        /* A string defining how the contents of the layer is mapped into its
        * bounds rect. Options are `center', `top', `bottom', `left',
        * `right', `topLeft', `topRight', `bottomLeft', `bottomRight',
        * `resize', `resizeAspect', `resizeAspectFill'. The default value is
        * `resize'. Note that "bottom" always means "Minimum Y" and "top"
        * always means "Maximum Y".*/
    
    //  属于CALayer的内容模式
     self.layerView.layer.contentsGravity = kCAGravityResizeAspect;
    

    contentsScale

    1. 去除像素化
    2. 定义寄宿图的像素尺寸和视图大小的比例
    layer.contentsScale = [UIScreen mainScreen].scale;  
    

    maskToBounds

    等同于UIView的clipsToBounds的属性,去除超出边界的内容


    Custom Drawing

    除了给图层设置contents的寄宿图,也可以直接用CoreGraphics直接绘制(继承UI View并实现-drawRect:方法)

    • -drawRect:方法的实现

    UIView检测到-drawRect:方法被调用,UIView 会给视图分配一个寄宿图,并且这个寄宿图的像素尺寸等于视图大小与contentsScale的乘积之值。
    基于上条原因,如非必须切勿将一空-drawRect:方法置于UIView子类之下

    • -drawRect:方法的调用

    视图出现在屏幕上的时候就会被自动调用
    代码内容先调用CoreGraphics绘制寄宿图,之后缓存这些代码内容直到需要被更新(手动调-setNeedDisplay方法 )。

    布局

    • position 和 anchorPoint

    position: 图层在父图层的哪一个位置
    anchorPoint:该图层的哪一个点在父图层指定的点上

    相关文章

      网友评论

          本文标题:CALayer----寄宿图

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