cString не работает, когда на iPhone заданы русские символы - PullRequest
1 голос
/ 23 января 2012

Я думаю, что это довольно просто. У меня есть следующий код, который записывает текст в файл для меня:

    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 Ответ

2 голосов
/ 23 января 2012

Для каждого байта в text, CGContextShowTextAtPoint() собирается отобразить его на глиф в текущем шрифте CGContextRef.Это на более низком уровне, чем вы, вероятно, хотите.

Чтобы нарисовать строку, которая может содержать любые глифы из любого языка, используйте методы рисования строк в UIStringDrawing.h.Примерно так:

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

Если вам нужен более точный контроль, вы можете посмотреть на кадр CoreText и создать CFAttributedString из вашего NSString, затем создать CTFramesetterRef через CTFramesetterCreateWithAttributedString (), создать CTFrameRef изи нарисуйте его в контексте, используя CTFrameDraw ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...