UIView和CALayer
2019-03-26 本文已影响0人
1234yws
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安排了重绘工作和保存了因此产生的图片。