我正尝试通过Quartz
通过NSView
将一些文字绘制到CGContextShowTextAtPoint()
上。这很有效,直到我在我的(BOOL)isFlipped
子类中覆盖YES
返回NSView
,以便将原点放在左上角进行绘制。文本在预期区域绘制,但字母全部反转。我也试过(理论上,至少)相当于翻转我的CGContext并按照上下文的高度进行翻译。
e.x。
// drawRect:
CGContextScaleCTM(theContext, 1, -1);
CGContextTranslateCTM(theContext, 0, -dirtyRect.size.height);
这会产生相同的结果。
对类似问题的许多建议都指向修改文本矩阵。我已经将文本矩阵设置为单位矩阵,对其执行了额外的反转,并分别完成了两者。所有这些解决方案都导致文本呈现更奇怪(通常只显示一个片段。)
我看到的另一个建议是简单地避开这个功能,转而采用其他绘图方式(ex NSString
的绘图方法。)但是,这主要是在C ++ / C和I'之间完成的。如果可能的话,我希望保持这些水平。
我们非常感谢任何建议,如果需要,我很乐意发布更多代码。
谢谢, 萨姆
答案 0 :(得分:2)
这个问题已经回答here。
基本上是因为iOS核心图形上的坐标系被翻转(左上角为x:0, y:0
),与Mac上的坐标系相对(其中x:0, y:0
为左下角)。解决方法是设置文本转换矩阵,如下所示:
CGContextSetTextMatrix(context, CGAffineTransformMake(1.0,0.0, 0.0, -1.0, 0.0, 0.0));
答案 1 :(得分:1)
您需要使用视图的边界而不是dirtyRect并在缩放之前执行转换:
CGContextTranslateCTM(theContext, 0, -NSHeight(self.bounds));
CGContextScaleCTM(theContext, 1, -1);
答案 2 :(得分:0)
原来答案是修改文本矩阵。显示而不是文本的奇怪“片段”是因为当替换“默认”文本矩阵时,字体大小(通过CGContextSelectFont()设置)太小。由于某种原因,初始矩阵具有大规模变换,因此当矩阵未经修改时,较小的文本大小看起来很好;然而,当用反比例(1,-1)或单位矩阵替换时,它们将变得难以置信。