【发布时间】:2012-07-19 07:54:03
【问题描述】:
我有一个 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的提醒,我才能够解决这个问题。详情见答案。
【问题讨论】:
-
如果您只希望时间戳是垂直的,为什么不只旋转时间戳而不是其他所有内容?
-
哦,我是。但我需要将时间戳正确定位在父坐标处。但是我不能“只”旋转一个矩形,可以吗?非常感谢你的提问......我开始担心没人看到我的问题:D
-
快速查看文档显示the methods for drawing and manipulating the text。看起来您可以在那里设置文本位置,也可以设置应该允许您旋转它的文本矩阵。我并不是说你的方法是错误的,我只是认为在这种情况下旋转文本更合乎逻辑。
-
@lawicko 我尝试了这些方法(如上次编辑中所述)。但它并不像我想要的那样工作。但真的,真的很感谢你花时间解决我的问题。
标签: objective-c position rotation quartz-2d