我有一个 UIView,我在“drawRect”函数中手动绘制它。它基本上是一个坐标系,在 Y 轴上有“值”,在“X 轴”上有“时间”。
由于空间问题,我希望时间戳是垂直的,而不是水平的。为此,我使用:
CGContextSaveGState(ctx); //Saves the current graphic context state
CGContextRotateCTM(ctx, M_PI_2); //Rotates the context by 90° clockwise
strPos = CGContextConvertPointToUserSpace(ctx, strPos); //SHOULD convert to Usercoordinates
[str drawAtPoint:strPos withFont:fnt]; //Draws the text to the rotated CTM
CGContextRestoreGState(ctx); //Restores the CTM to the previous state.
ctx (CGContextRef)、strPos (CGPoint) 和 str (NSString) 是变量,已为“水平文本”正确且正确地初始化,其宽度为文本高度。
虽然这段代码在 iPhone 3 上完美运行,但它让我在 iPhone 4 (Retina) 上一团糟,因为 CGContextConvertPointToUserSpace 函数产生完全不同的结果,即使 iPhone 的坐标系应该保持不变。
我也尝试使用 CGAffineTransform,但结果相同。
总结一下我的问题:如何将文本绘制到父坐标系中的计算位置(0、0 为左上角)?
在再次研究了有关 Quartz 2D 的 Apple 文档后,我意识到,Pi/2 的旋转将我所有的书写都移到了屏幕左侧。
我可以通过将 CTM 平移 +height 使文字出现在垂直线上。我会继续努力,但仍然很乐意得到答案。
编辑:感谢lawicko的提醒,我能够解决这个问题。有关详细信息,请参阅答案。