UIView和CALayer

CALyer介绍

CALyer类在概念上和UIView类似,都是一些被层级关系树管理的巨型块,也包含内容,子图层的位置,有一些方法和属性做动画和变换。

与UIView最大的不同就是CALyer不处理用户的交互,不清楚具体的响应链。
与UIView是平行的层级关系
UIView只是对它的一个封装,提供了一些响应链的功能
CALyer是UIView的内部实现

CALyer功能

  • 阴影,圆角,带颜色的边框
  • 3D变换
  • 非矩形规范
  • 透明遮照
  • 多级非线性动画

contents必须为CGImage,否则图层就会为空白图层

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

contentsGravity图片填充样式

contentsScale浮点数,默认为1.0

layer.contentsScale = [UIScreen mainScreen].scale;

maskToBounds是否显示超出边界的内容

contentsRect这涉及到图片是如何显示和拉伸的,所以要比contentsGravity 灵活多了 默认 contentsRect 是{0, 0, 1, 1}

contentsCenter

UIView可以通过drawRect方法进行自定义绘制

如果UIView检测到 - drawRect: 方法被调用了,它就会为视图分配一个寄宿图,这个寄宿图的像素尺 寸等于视图大小乘以 contentsScale 的值。
如果不需要绘制,就不要创建这个方法,因为这个方法当视图出现在屏幕上时就会自动调用,就不会砸成CPU资源和内存的浪费。

虽然 -drawRect: 方法是一个UIView方法,事实上都是底层 的CALayer安排了重绘工作和保存了因此产生的图片。

你可能感兴趣的:(UIView和CALayer)