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