在iPhone上给出俄语字符时cString失败

时间:2012-01-23 02:58:58

标签: iphone objective-c xcode

我认为这是非常基本的。我有以下代码将文本写入文件:

    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;

它可以与传统的英文文本一起使用,但是当我传入俄文或其他西里尔文字符时,文字全都乱七八糟。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

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

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

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

如果需要更细粒度控制,可以查看CoreText框架并从NSString创建CFAttributedString,然后通过CTFramesetterCreateWithAttributedString()创建CTFramesetterRef,从中创建CTFrameRef,并使用CTFrameDraw将其绘制到上下文中( )。