2011-08-27 42 views
4

没有我做任何事情来请求颠倒文本,CGContextShowText正在以这种方式绘制它。它应该是一个垂直镜像。CGContextShowText正在渲染颠倒的文本(镜像)

float font_size = 19.; 
CGContextSelectFont (context, "Helvetica", font_size, kCGEncodingMacRoman); 
CGContextSetTextDrawingMode (context, kCGTextFill); 
CGContextSetRGBStrokeColor (context, 255, 0, 0, 0); 
CGContextSetRGBFillColor (context, 255, 0, 0, 0); 
CGContextSetTextPosition (context, x, y); 
CGContextShowText (context, cstring, strlen(cstring)); 

我该如何解决这个问题?此外,为什么这是默认绘图模式?

谢谢。

+0

我找到了答案。人们必须设置文本矩阵。 – Nemo

+1

您应该将其作为答案发布。 (另外,我希望你从一些不会包含任何其他语言的字符的'cstring',否则,这将在某些语言环境中绘制垃圾文本。) –

+0

[如何旋转由iPhone上的Quartz绘制的文本](http://stackoverflow.com/questions/1899775/how-to-rotate-text-drawn-by-quartz-on-iphone) –

回答

0

该问题的最佳解决方案是在绘制例程开始时简单地调用它。 (确保仅调用一次。)

CGAffineTransform transform; 
    transform = CGAffineTransformConcat(CGContextGetTextMatrix(ctx), 
             CGAffineTransformMake(1.0, 0.0, 0.0, 
                   -1.0, 0.0, 0.0)); 
    CGContextSetTextMatrix(ctx, transform); 
7

这种“upsidedownness”常用进场时,API从上到下呈现到您的CGContext上,但不知你是从下往上拉。无论如何,我用的是2号线的解决方案是:

CGAffineTransform trans = CGAffineTransformMakeScale(1, -1); 
CGContextSetTextMatrix(tex->cgContext, trans); 
1

斯威夫特3

let context = UIGraphicsGetCurrentContext()! 
    let textTransform = CGAffineTransform(scaleX: 1.0, y: -1.0) 
    context.textMatrix = textTransform