更改UIKit和/或CoreGraphics中的坐标系

时间:2014-02-21 01:11:46

标签: ios uikit core-graphics coordinates

是否可以在UIKit或CoreGraphics框架中更改坐标系的原点?我附上了一张照片来解释我的意思:

谢谢!enter image description here

1 个答案:

答案 0 :(得分:1)

设置视图transform时,它有两个效果:

  1. 视图将变换应用于drawRect:
  2. 中使用的图形上下文
  3. 视图将变换应用于用于布置其子视图的坐标系。
  4. 从你的评论中听起来你想要#1而不是#2。以下是一些没有#2的#1的方法:

    1. 根本不要设置视图的transform。相反,将变换应用于drawRect:中的图形上下文,如下所示:

      CGAffineTransform transform = ...
      CGContextConcatCTM(UIGraphicsGetCurrentContext(), transform);
      

      或者使用CGContextRotateCTM等方法直接在图形上下文中构建变换。

    2. 创建一个单独的子视图(带有自己的UIView子类)进行绘制,并在该子视图上设置变换。因此,您的视图层次结构将如下所示:

      view
          subview for drawing, with transform
          other, untransformed subview #1
          other, untransformed subview #2
          other, untransformed subview #3
          etc.
      
    3. 转到视图的基础CALayer。设置视图的transform属性时,它会将仿射变换转换为完整的3D(4x4)变换矩阵,并设置其图层的transform属性。该图层具有另一个属性sublayerTransform,仅适用于其子图层。我相信您可以将sublayerTransform设置为其transform的倒数,以有效地使transform仅适用于您在其上下文中绘制的图形。这应该这样做:

      view.transform = ...;
      view.layer.sublayerTransform = CATransform3DInvert(view.layer.transform);