为什么iPhone上需要Quartz 2D文本翻转变换

时间:2010-08-15 05:57:02

标签: iphone text quartz-2d

From the Apple docs:

  

在iOS中,必须对当前图形上下文应用翻转变换,以使文本的方向如图16-1所示。 [翻转变换]涉及反转y轴并将原点平移到屏幕的底部。清单16-2显示了如何在iOS视图的drawRect:方法中应用此类转换。然后,此方法调用清单16-1中的相同MyDrawText方法。

为什么呢?这看起来非常糟糕。

1 个答案:

答案 0 :(得分:7)

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

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

普通核心图形上下文(用于绘制图像或PDF用于存储或显示)不会反转,因此情况正好相反。普通的Quartz文本将呈现正常,但使用NSString UIKit扩展绘制的东西需要首先反转坐标系。这会导致开发人员在绘制到屏幕时图像和文本看起来正确时会产生很多混淆,但在保存到磁盘时最终会出现颠倒。

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