核心图形坐标系

Posted

技术标签:

【中文标题】核心图形坐标系【英文标题】: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 不同的东西吗?

【问题讨论】:

【参考方案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)];

【讨论】:

以上是关于核心图形坐标系的主要内容,如果未能解决你的问题,请参考以下文章

图形与游戏中3D数学基础的说明

计算机图形学4--坐标系统

三维立体坐标系中 将一个立体图形缩小几倍 应该对xyz坐标怎么处理?

Cocoa Touch:图形界面构建UIKit

自动寻路之A星算法+Qt开发图形界面

Mathematica图形化三维坐标系的建立