2011-08-27 41 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