覆盖时drawRect
,我发现那里的坐标使用 0,0 作为左上角。
但是 Apple UIView 编程指南是这样说的:
一些 iOS 技术定义了默认坐标系,其原点和方向与 UIKit 使用的不同。例如,Core Graphics 和 OpenGL ES 使用坐标系,其原点位于视图或窗口的左下角,并且其 y 轴相对于屏幕指向上方。
我很困惑; 当他们在这里提到 Core Graphics 时,他们在谈论与 Quartz 不同的东西吗?
覆盖时drawRect
,我发现那里的坐标使用 0,0 作为左上角。
但是 Apple UIView 编程指南是这样说的:
一些 iOS 技术定义了默认坐标系,其原点和方向与 UIKit 使用的不同。例如,Core Graphics 和 OpenGL ES 使用坐标系,其原点位于视图或窗口的左下角,并且其 y 轴相对于屏幕指向上方。
我很困惑; 当他们在这里提到 Core Graphics 时,他们在谈论与 Quartz 不同的东西吗?
本文档中的“核心图形”是指“石英”,是的。这只是过于简单化了。
当您自己创建时CGContext
,其坐标系的原点位于左下角。当 UIKit 在CGContext
视图中创建用于绘图时,它会在调用-drawRect:
.
就坐标而言,iOS 上的 Core Graphics 和 Quartz 是一回事。iOS 技术指南是这样说的:
核心图形(也称为 Quartz)...
Core Graphics 框架 (CoreGraphics.framework) 包含 Quartz 2D 绘图 API 的接口。Quartz 与 Mac OS X 中使用的基于矢量的高级绘图引擎相同。
区别在于,从技术上讲,Quartz 是技术或机制,而“Core Graphics”是框架的名称。(当然,在 Mac OS 上,实际上有一个“Quartz”框架,它只是一个保护伞。)
为了其他人找到这个线程的利益:
这里有坐标系的完整解释:Coordinate Systems in Cocoa
它们不同并不完全有帮助。有一些方法可以在您的应用程序中的各个视图级别的坐标系之间进行转换!例如,这会在缩放图像的可见屏幕中找到它在 (20,20) 处的点的坐标。结果与缩放图像的原点相关,现在可能在空间中很远。
croppingFrame.origin = [self convertPoint:CGPointMake(20.0, 20.0) fromCoordinateSpace:(self.window.screen.fixedCoordinateSpace)];