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

From the Apple docs:

In iOS, you must apply a flip transform to the current graphics context in order for the text to be oriented as shown in Figure 16-1. [A flip transform] involves inverting the y-axis and translating the origin point to the bottom of the screen. Listing 16-2 shows you how to apply such transformations in the drawRect: method of an iOS view. This method then calls the same MyDrawText method from Listing 16-1.

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

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

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

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

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

相关文章
相关标签/搜索