16/04/21 第三章图层几何学
布局
UIView
的三个重要布局属性frame``bounds``center
,CALayer
与之对应的是frame``bounds``position
.UIView
的三个布局属性是映射的CALayer
的布局属性.frame
是根据bounds``position
和transform
计算而来.- 当视图旋转时,可能会造成
frame
中size
的大小与bounds
中size
的大小不一致. anchorPoint
锚点,默认为视图中心.钟表指针需改变锚点.相对坐标的转换函数:
UIView使用:
- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view;
- (CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view;
- (CGRect)convertRect:(CGRect)rect toView:(UIView *)view;
- (CGRect)convertRect:(CGRect)rect fromView:(UIView *)view;
CALayer使用:
- (CGPoint)convertPoint:(CGPoint)point fromLayer:(CALayer *)layer;
- (CGPoint)convertPoint:(CGPoint)point toLayer:(CALayer *)layer;
- (CGRect)convertRect:(CGRect)rect fromLayer:(CALayer *)layer;
- (CGRect)convertRect:(CGRect)rect toLayer:(CALayer *)layer;
zPosition
1
2
3
4
5设置layer的zPosition可以更改图层显示顺序.一般设置为`n * 1px`的浮点型,最好不要设置有小数,因为浮点型的四舍五入会造成不必要的麻烦.
需要注意的是, 通过zPosition只能更改图层的显示顺序,而不能更改事件的传递顺序.
事件的传递顺序与视图先后添加的顺序有关,而与图层显示顺序无关.只是默认的图层显示顺序与视图先后添加的顺序相同而已.
Hit Testing
一直以为
-containsPoint:
和-hitTest:
方法是UIView的, 原来也是CALayer的.
CALayer不关心任何响应链事件,但是提供了以上两个方法,你可以通过这两个方法来处理事件.