Core Animation 阅读随笔 第三章

16/04/21 第三章图层几何学

布局

  1. UIView的三个重要布局属性frame``bounds``center, CALayer与之对应的是frame``bounds``position. UIView的三个布局属性是映射的CALayer的布局属性.
  2. frame是根据bounds``positiontransform计算而来.
  3. 当视图旋转时,可能会造成 framesize的大小与boundssize的大小不一致.
  4. anchorPoint锚点,默认为视图中心.钟表指针需改变锚点.
  5. 相对坐标的转换函数:

    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;

  6. zPosition

    1
    2
    3
    4
    5
    设置layer的zPosition可以更改图层显示顺序.一般设置为`n * 1px`的浮点型,最好不要设置有小数,因为浮点型的四舍五入会造成不必要的麻烦.

    需要注意的是, 通过zPosition只能更改图层的显示顺序,而不能更改事件的传递顺序.

    事件的传递顺序与视图先后添加的顺序有关,而与图层显示顺序无关.只是默认的图层显示顺序与视图先后添加的顺序相同而已.
  1. Hit Testing

    一直以为-containsPoint:-hitTest:方法是UIView的, 原来也是CALayer的.
    CALayer不关心任何响应链事件,但是提供了以上两个方法,你可以通过这两个方法来处理事件.