20210406 福州 微风 冷
30岁后,要明白自己付出的每个动作是否如演员搬得精准,观众的反应。
白板开发过程中,遇到再cashaperlayer层绘制,超出UIview问题。今天总结下,这个图层源码能力。多余话网上都有,只关注容易忽略点。
iOS理念,视图都是由UIView基类派生而来,UIView支持事件响应、CG绘图、仿射变换以及各种动画。CALayer是不能够响应事件的。
CALayer 可以通过id
类型的contents
属性设置图,虽然我们给contents
属性任何值都能编译通过,但是CALayer还是比较任性的,它只接受CGImage
类型的值,其它类型值它都将显示空白。
Layer.contents = (__bridge id)[UIImage imageNamed:@"dk.jpeg"].CGImage;
UIImage本身已经将这种显示比例关系处理好了,所以一张图片在不同设备上显示的大小是相同的,但是耿直的CGImage并没有做这种处理,这时就需要我们手动的控制contentsScale
属性来达到想要的效果。
Layer.contentsScale = image.scale;
UIView和CALayer的区别--网络
- UIView可以响应事件,CALayer不可以响应事件;
- 一个 Layer 的 frame 是由它的 anchorPoint,position,bounds,和 transform 共同决定的,而一个 View 的 frame 只是简单的返回 Layer的 frame。
- layer独有功能: 阴影,圆角,带颜色的边框的设置;3D变换;非矩形范围;透明遮罩;多级非线性动画;
- UIView主要是对显示内容的管理, CALayer 主要侧重显示内容的绘制;UIView本身没有显示的能力,是它内部的CALyer图层才有了显示功能。
- Layer 比 View 多了个AnchorPoint
平时当我们改变UIView的frame
的时候,实际上是在改变视图中layer的frame
通常情况下,frame
的宽高和bounds
的宽高是相同的,但是当改变了transform
的时候,frame
的宽高和bounds
的宽高可能就不再相同了。原因网络查询。
CALayer提供了两个方法:-containsPoint:
和-hitTest:
containsPoint
图层范围内,就返回YES
hitTest
返回值不是BOOL
类型了,而是图层本身