Как отображать международные акценты с кварцевой / основной графикой на iPhone - PullRequest
2 голосов
/ 24 июня 2011

Я локализовал приложение для iPhone. Не удивительно, локализация включает в себя несколько акцентов:

"Коснитесь карты для выбора. Затем нажмите 'Ставка'. "=" Touchez les cartes pour les sélectionner, puis touchez 'Miser'. ";

Они хорошо работают в высокоуровневых вещах, например, когда я помещаю текст в таблицу, но когда я пытаюсь записать их в UIView вручную, акценты искажаются:

enter image description here

Я использую kCGEncodingMacRoman и UTF8, оба из которых должны поддерживать акценты, я думаю, но я явно что-то упускаю:

CGContextSelectFont(ctx,fontName,thisWriting.fontSize,kCGEncodingMacRoman);
CGContextShowTextAtPoint(ctx,
                        thisWriting.center.x - floor(thisTextSize.width/2),
                        yThusFar,
                        [thisText UTF8String],
                        [thisText length]);

Шрифт - это вариант ArialMT. thisText - просто строка NSString.

Ответы [ 2 ]

3 голосов
/ 24 июня 2011

Кварц предоставляет ограниченный низкоуровневый интерфейс для рисования текста.Для получения информации о функциях рисования текста посмотрите Ссылку CGContext.Для полной поддержки Unicode и макета текста используйте службы, предоставляемые Core Text или ATSUI).

2 голосов
/ 29 июня 2011

Чтобы расширить то, что сказал Сорин: Quartz / Core Graphics не поддерживает текст Unicode, который включает в себя акценты, которые вам нужны для иностранных языков. Традиционно было несколько альтернативных способов решения этой проблемы, но в настоящее время лучшим решением является использование Core Text, который может записывать напрямую в графический контекст, как я делал здесь.

Основным элементом в Core Text является класс NSAttributedString или NSMutableAttributed String.

Вот код, подобный тому, который был у меня для Core Text:

CTLineRef thisLine = CTLineCreateWithAttributedString((CFAttributedStringRef)thisAText);
CGContextSetTextPosition(ctx, self.center.x - floor(thisTextSize.width/2), yThusFar);
CTLineDraw(thisLine, ctx);

О шрифте уже позаботились, потому что он является частью NSAttributedString (или CFAttributedStringRef, который является бесплатным мостовым эквивалентом).

Вот результат:

enter image description here

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