无法理解iOS核心图形坐标系转换,需要帮助

时间:2012-02-23 06:58:35

标签: ios core-graphics

我正在尝试了解石英2d坐标系,目前我正在阅读Apple参考指南和旧书“用于mac os x开发人员的Quartz 2d图形”。

我理解用户空间和设备空间概念的概念,设备空间可以有不同的默认坐标系,设备空间坐标不能被修改,我们通过修改其坐标系加入到用户空间来映射设备空间实现欲望的结果。


  • 问题的第一部分

mac os x开发者书的Quartz 2d图形说:

  

转换坐标系时,必须有另一个坐标系   坐标系来比较它。转型提供了一个   从一个坐标系到另一个坐标系的相对映射。当你   在变换后的坐标系中绘制,变换映射   图形回到第一个坐标系。那个样子的外观   固定坐标系中的图形受到影响   转化

我没有用粗体来说明这一点。

Quartz 2D programming guide说:

  

Quartz使用单独的坐标完成设备独立性   system-user space-mapping将其映射到输出的坐标系   设备 - 设备空间 - 使用当前转换矩阵或CTM。一个   矩阵是用于有效描述集合的数学构造   相关方程式。当前的转换矩阵是a   特殊类型的矩阵,称为仿射变换,映射   通过应用翻译从一个坐标空间指向另一个坐标空间   旋转和缩放操作(移动,旋转和移动的计算)   调整坐标系的大小。)

     

当前的转换矩阵有一个次要目的:它允许   你可以转换对象的绘制方式。例如,绘制一个框   旋转45度,旋转页面的坐标系   (CTM)在绘制框之前。 Quartz绘制到输出设备   使用旋转坐标系。

混淆是“Quartz使用旋转的坐标系绘制到输出设备。”,如果我想绘制一个旋转的对象(图像等)而不旋转那么会发生什么?我们有旋转的整个坐标,每个被绘制的东西都会旋转吗?

我正在尝试不同的实验,但无法绕过这个,我创建了一个图像,我在Photoshop中绘制了两行复制左下角坐标系,然后添加到我的项目中,通过调用{{1}可见地看到坐标是如何表现的在drawrect方法中,但它没有对使用界面生成器在xii文件中包含的图像做任何事情。使用uiimage放置图像。

此代码来自quartz 2D编程指南

CGContextRotateCTM(myContext, 45);

但是这段代码修改了屏幕上绘制的文字而不是我添加的图片?


  • 问题的第二部分

这也来自Quartz 2D编程指南:

  

...应用将原点转换为左上角的转换   PDF上下文的一角,并将y坐标缩放-1。

     

使用缩放变换来否定y坐标会改变某些坐标   Quartz绘图中的约定。例如,如果你打电话   CGContextDrawImage将图像绘制到上下文中,图像是   当它被绘制到目的地时由变换修改。 ...

我已经做了这件事-1但对图像没有影响,这件事情仍然不清楚。

我已多次阅读此文档,尝试在谷歌搜索但没有有用的教程,也没有最新的书只有2004年,2005年,2006年的书籍。任何人都可以帮助这个或者可以参考我有用的资源来学习这是深入的。

拼命等待回复,真的需要帮助。 谢谢。

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:0)

您使用的是UIImageView子类并覆盖drawRect吗?这不受支持(请参阅文档),这可能是您的图像不受任何转换影响的原因。

如果你想进行大量的转换和定制绘图代码,那么你应该使用UIView子类并使用CGContextDrawImage()手动绘制图像

任何变换都应用于变换后完成的绘制操作。您将在文档中看到保存图形状态的代码示例,应用转换,完成一些绘图,然后恢复上下文。这是你绘制一些旋转的组件而不是一些组件。

希望一旦您通过CG代码而不是通过图像视图绘制图像,问题的第二部分就会变得清晰。