iOS中图层几何学

2020-07-08  本文已影响0人  浪呀么浪打浪

UIView有三个重要的布局属性:frame,bounds和center,CALayer对应的叫frame,bounds和position。为了区分,图层使用了position,视图用了center。但是他们都代表同样的值。

视图的frame,bounds和center属性仅仅是存取方法,当操作视图的frame,实际上是在改变位于视图下方CALayer的frame,不能够独立于图层之外改变视图的frame。

对于视图或者图层来说,frame并不是一个非常清晰的属性,它其实是一个虚拟属性,是根据bounds,position和transform计算而来,所以当其中一个值发生变化,frame就会变化。frame变化也会影响其他的值。

对图层做变换的时候,比如选择或者缩放,frame实际上代表了覆盖在图层旋转之后的整个轴对齐的巨型区域,也就是frame的宽高可能和bounds的宽高不一致了。

锚点

anchorPoint位于图层的中点,但是图层的anchorPoint可以被移动。当改变了anchorPoint,position属性保持固定的值并没有发生改变,但是frame却移动了。

Z坐标轴

和UIView严格的二维坐标系不同,CALayer存在于一个三维空间当中,zPosition和anchorPointz,二者都是在Z轴上描述图层位置的浮点类型。

zPosition属性除了做变换之外,zPosition最实用的功能是改变图层的显示顺序。

Hit Test

CALayer并不关心任何响应链事件,所以不能直接处理触摸事件或者手势。但是它有一系列的方法帮你处理事件:-containsPoint: 和-hitTest。

containsPoint:接受一个本图层坐标系下的CGPoint,如果这个点在图层frame范围内就返回yes。

-hitTest:方法同样接受一个CGPoint类型参数,而不是BOOL类型,它返回图层本身,或者包含这个坐标点的叶子节点图层。

上一篇下一篇

猜你喜欢

热点阅读