iPhone - 使用CGContext绘制文本:可以,但是...镜像的。

8

使用CGContext绘制文本时,文本会被镜像绘制。

我尝试应用一些变换,然后它就可以正常绘制,但是接下来的绘图和所有坐标似乎都会出现问题。

我尝试在绘制文本之前和之后保存和恢复上下文(并应用变换),但这并没有帮助。

如何在不影响其余绘图或屏幕上文本的CGPoint坐标的情况下,使用CGContext将某些文本绘制到视图上?


我在Y轴上也得到了镜像文字。我该如何修复这个问题? - Bogdan
2个回答

13

你能解释一下你所说的“镜像”是什么意思吗?这里有一些绘制黑色文本的代码,它不应该被“镜像”。

CGRect viewBounds = self.bounds;
CGContextTranslateCTM(ctx, 0, viewBounds.size.height);
CGContextScaleCTM(ctx, 1, -1);
CGContextSetRGBFillColor(ctx, 0.0, 1.0, 0.0, 1.0);
CGContextSetLineWidth(ctx, 2.0);
CGContextSelectFont(ctx, "Helvetica", 10.0, kCGEncodingMacRoman);
CGContextSetCharacterSpacing(ctx, 1.7);
CGContextSetTextDrawingMode(ctx, kCGTextFill);
CGContextShowTextAtPoint(ctx, 100.0, 100.0, "SOME TEXT", 9);

这真的很接近我所做的。今晚我会尝试你的代码片段。 - Oliver
1
由于 CGContextSetRGBFillColor(ctx, 0.0, 1.0, 0.0, 1.0); 这行代码。 - NetDeveloper
6
自iOS 7.0起,CGContextShowTextAtPoint已被弃用。 - Valentin Solina
是的,CGContextShowTextAtPoint不起作用了,有没有在特定CGContextRef上绘制文本的解决方案? - nullmicgo
NSString有一个称为UIStringDrawing的类别,其中包含许多文本绘制函数,比如drawInRect:withFont:。它们会在当前上下文中进行绘制。 - AechoLiu

9
我认为你需要反转文本矩阵:
CGAffineTransform transform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
CGContextSetTextMatrix(context, transform);

感谢这个简单的解决方案!非常好用。 - stonecompass

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接