2012-01-23 22 views
1

我认为这很基本。我有以下的代码这对我来说将文本写入一个文件:cString在iPhone上给出俄文字符时失败

float curpo = CGContextGetTextPosition(ref).x; 
    float newpo = 0; 
    float textw = 0; 

    const char *text = [userName cStringUsingEncoding:NSUTF8StringEncoding]; 
    CGContextSetTextDrawingMode(ref, kCGTextInvisible); 
    CGContextShowTextAtPoint (ref, 0, pos, text, strlen(text)); 
    newpo = CGContextGetTextPosition(ref).x; 
    textw = newpo - curpo; 

它正常工作与传统的英文文本,但是当我通过在俄罗斯或其他斯拉夫字母,文字出来的所有混乱。我怎样才能解决这个问题?

回答

2

对于text中的每个字节,CGContextShowTextAtPoint()将把它映射到CGContextRef当前字体中的字形。这比你想要的要低。

要绘制一个可能包含任何语言字形的字符串,请使用UIStringDrawing.h中的字符串绘图方法。事情是这样的:

UIGraphicsPushContext(context); 
[userName drawAtPoint:pos withFont:[UIFont systemFontOfSize:16]]; 
UIGraphicsPopContext(); 

如果您需要更精确的控制,你可以看看CoreText框架,并从您的NSString创建CFAttributedString,然后创建通过CTFramesetterCreateWithAttributedString(一CTFramesetterRef),从创建CTFrameRef,和使用CTFrameDraw()将其绘制到上下文中。

+0

正是我所需要的。谢谢。 – mostlyharmless