核心图形坐标系原点混乱

hit*_*lad 6 core-graphics cgcontext coordinate-systems

我对 UIKit 和 Core Graphics 之间的坐标系差异有点困惑。Apple 文档指出 UIKit 使用 ULO(左上原点),而 Core Graphics 使用 LLO(左下原点)。

然而,正如一篇关于坐标系的文章中所指出的,值得注意的是 UIKit

在调用 -drawRect 之前有用地翻转坐标系:

当我在 (0,0) 处绘制一个矩形时,它确实位于左上角,所以事情看起来确实翻转了。但是,当我使用 CGContextDrawImage() 绘制图像时,它仍然是翻转的。我知道我可以使用 drawAtPoint() 来避免颠倒的图像,但我只是对坐标系感到好奇:如果它是由 UIKit 翻转的,那么如果将其绘制到翻转的上下文中,为什么图像仍然是颠倒的?另外,有没有办法获得未翻转的坐标系?也就是说,有没有一种方法可以不通过UIKit来创建CGContext?

谢谢!

hit*_*lad 1

由于我没有得到答案,我将提出我的最佳猜测:UIKit“有效地”将上下文从 LLO 翻转到 ULO,但是与路径不同,图像在内部有自己的坐标系(对于图像)。在 Core Graphics 中,该坐标系被解释为 LLO,因此它是颠倒的。

至于在没有 UIKit 的情况下创建 CGContext - 过去似乎是可能的,但已被删除。

任何评论/更正表示赞赏。

  • 你在第一部分基本上是正确的。对于第二部分,“CGBitmapContextCreate”自 iOS 2.0 起就可用,并且至今仍然有效。 (2认同)