我认为这是非常基本的。我有以下代码将文本写入文件:
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;
它可以与传统的英文文本一起使用,但是当我传入俄文或其他西里尔文字符时,文字全都乱七八糟。我该如何解决这个问题?
答案 0 :(得分:2)
对于text
中的每个字节,CGContextShowTextAtPoint()
将把它映射到CGContextRef当前字体中的字形。这比你想要的要低。
要绘制可能包含任何语言的任何字形的字符串,请使用UIStringDrawing.h中的字符串绘制方法。像这样:
UIGraphicsPushContext(context);
[userName drawAtPoint:pos withFont:[UIFont systemFontOfSize:16]];
UIGraphicsPopContext();
如果需要更细粒度控制,可以查看CoreText框架并从NSString创建CFAttributedString,然后通过CTFramesetterCreateWithAttributedString()创建CTFramesetterRef,从中创建CTFrameRef,并使用CTFrameDraw将其绘制到上下文中( )。