Кварц 2D ошибки рисования текста при кодировании и преобразовании? - PullRequest
0 голосов
/ 03 июня 2011

Я работаю над функцией добавления текста для моего приложения.Этот текст будет добавлен с CGContext и Quartz 2D.Переменная text извлекается из свойства текста UITextField.

Вот код, который у меня есть:

CGRect textBox = CGRectMake(0, 0, 300, 200);
UIView *textView = [[UIView alloc] initWithFrame:textBox];
const char *textChar = [text UTF8String];   

NSInteger xLocation = (contentOffset.x + 100);
CGContextSelectFont (UIGraphicsGetCurrentContext(), "Helvetica", 14.0f, kCGEncodingMacRoman);
CGContextSetShouldSmoothFonts(UIGraphicsGetCurrentContext(), YES);
CGContextSetCharacterSpacing (UIGraphicsGetCurrentContext(), 10);
CGContextSetTextDrawingMode (UIGraphicsGetCurrentContext(), kCGTextFill);
CGContextSetRGBFillColor (UIGraphicsGetCurrentContext(), 255, 255, 255, 1.0); 
CGContextShowTextAtPoint (UIGraphicsGetCurrentContext(), xLocation, 110, textChar, 9);
[drawGallery addSubview:textView];

У меня есть несколько проблем с этим:

  1. Текст переворачивается - (это легко исправить с помощью преобразования, но у учебника, которого я придерживался, этой проблемы не было, поэтому я немного запутался LINK ).

  2. Текст отображается со странными символами - я думаю, что это проблема с кодировкой, но как мне это настроить?

  3. Текст не 'Его не добавляют к представлению в строке addSubview, оно добавляется только при обновлении CGContext, т.е. у меня тоже есть функция рисования линий, и если я рисую в представлении, то текст волшебным образом всплывает.

  4. Текст ужасно зазубренный и плохо прорисован, могу ли я что-то сделать для этого?Я добавил CGContextSetShouldSmoothFonts, но он, похоже, ничего не делает.

Пример приведен ниже:

strange characters

Спасибо за любую помощь, которую вы можете оказать.

Ответы [ 2 ]

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

Для переворачивания текста было опубликовано решение для кого-то с той же проблемой. Решение для перевернутого текста. [Stackoverflow] - используйте:

CGContextSetTextMatrix(context, CGAffineTransformMake(1.0,0.0, 0.0, -1.0, 0.0, 0.0));                  

Для проблемы кодирования вы получаете текст cString с [text UTF8String] (символы UTF8 обычно многобайтовые), но CGContextSelectFont() указывает MacRoman (однобайтовый формат).

Julian

0 голосов
/ 27 июня 2011

Я выяснил большую часть этих ошибок.

  1. Текст рендеринга перевернутый

  2. Текст отображается со странными символами - я думаю, что это проблема с кодировкой, но как мне настроить это?

  3. Текст не добавляется в представление в строке addSubview, он только добавляется, когда CGContext обновил, т.е. у меня нарисованы линии функционировать тоже, и если я опираюсь на вид затем текст волшебным образом всплывает.

  4. Текст ужасно зазубренный и плохо прорисован, есть ли что-то, что я можно сделать для этого? Я добавил CGContextSetShouldSmoothFonts, но это похоже, ничего не делает.

  1. Используя базовое преобразование, я смог автоматически перевернуть текст.

  2. Здесь я настроил кодировку так, чтобы везде использовался MacRoman.

  3. Мне пришлось вручную вызывать обновление - я написал функцию, которая делает именно это, и вызывал ее там, где мне было нужно.

  4. Из-за того, что текстовый отпечаток зацикливался, казалось, что текст печатался несколько раз друг на друга, отсюда и неровность.

...