第三章 图层集合学
布局
- frame:图层的相对于父图层的外部坐标
- bounds:内部坐标
- center和position:相对于父图层anchorPoint所在的位置
- 设置视图的frame,bounds和center,也就是相当于设置图层的frame,bounds和position
- 一般情况下,frame中的size与bounds中的size是相同的,但是当视图旋转时,frame的size和bounds的size就不一样了,如下图
锚点
- 锚点是相对于父图层anchorPoint所在的位置。
- 默认,锚点位于图层的中点,可以改变锚点的位置,描点改变,frame也会随之改变。
- 改变锚点,position不会改变,但是frame改变了。
- anchorPoint是View在旋转是的轴点,如果想改变view的旋转轴点,改变anchorPoint即可
坐标系
- 与UIView一样,CALayer也提供了一套坐标变换的借口
1 | - (CGPoint)convertPoint:(CGPoint)p fromLayer:(nullable CALayer *)l; |
翻转的几何结构
- ios上坐标系原点为左上角,macOS上坐标系原点为左下角。
- CALayer的
geometryFlipped
属性决定了图层的坐标是否相对于父图层翻转。
z坐标轴
- zPosition:表示图层空间z轴上的位置
- zPosition除了可以改变z轴的位置,还可以用来改变图层的先后顺序,如图,如果设置了绿色view的zPosition,绿色View就可以覆盖在蓝色view之上。但是通过这种方法改变视图的层次,是不能改变视图的响应事件的顺序的。
- anchorPointZ表示z轴上锚点的位置
Hit Testing
- CALayer不能处理点击事件,但是他有一系列方法帮你处理事件。
- (BOOL)containsPoint:(CGPoint)p;
用于判断一个点是否属于一个图层- (nullable CALayer *)hitTest:(CGPoint)p;
返回被点击的图层
1 | - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { |