2010-08-15 79 views
5

From the Apple docs:为什么石英2D文本翻转变换iPhone上

需要在iOS中,必须应用翻转变换到当前图形上下文为了使文本如图16-1所示定向。 [翻转变换]包括反转Y轴并将原点移动到屏幕底部。清单16-2显示了如何在iOS视图的drawRect:方法中应用这种转换。然后这个方法调用清单16-1中相同的MyDrawText方法。

为什么?这看起来很尴尬。

回答

7

当我在this answer中展开时,Quartz 2D坐标系使用左下角作为(0,0),这与Mac上的窗口坐标系相同。 iPhone使用左上角作为其视图布局的(0,0),所以支持UIViews的图层将其坐标系绕Y轴翻转。

如果您使用NSString UIKit扩展将文本绘制到UIView的背景层中,它将被正确定向,因为该翻转被考虑在内。但是,如果使用较低级别的Quartz文本绘图,则需要首先关于Y轴的坐标系翻转(以便0,0再次位于左下角),以正确定位事物。

正常核心图形上下文(用于绘制图像或用于存储或显示的PDF)不会反转,所以情况正好相反。普通的Quartz文本会很好的渲染,但是使用NSString UIKit扩展绘制的东西需要先使坐标系反转。这会导致开发人员在绘制到屏幕上时图像和文本看起来很正确但在保存到磁盘时最终倒置。

至于为什么这样做,这是任何人的猜测。两种坐标系在某些情况下都有其优点。不过,这很容易纠正。

+0

不错答案brad .... +1 :) – 2012-04-27 09:28:29