gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:53:09 24 4
gpt4 key购买 nike

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

谢谢! enter image description here

最佳答案

当你设置 View 的transform时,它有两个效果:

  1. View 将转换应用于 drawRect: 中使用的图形上下文。
  2. View 将变换应用于用于布置其 subview 的坐标系。

从您的评论来看,您似乎想要#1 而不是#2。以下是一些无需#2 即可获得#1 的方法:

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

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

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

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

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

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

关于ios - 更改 UIKit 和/或 CoreGraphics 中的坐标系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21923220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com