Используя drawAtPoint метод NSSTRING вместо проблем CGContextShowGlyphsAtPoint

В моем приложении я пытаюсь представить текст вдоль пути; это хорошо для большинства символов, но не для японского языка (или что-либо не макрочеловек). Мне рекомендовали использовать [NSString drawAtPoint], который отображает правильные символы в моем CATiledLayer; однако, они dissapear приблизительно после 5 секунд. В это время я могу масштабировать слой, и они масштабируются правильно, но они, кажется, не преданы CATiledLayer как остальная часть текста, обычно.

Прежде чем я представлю, я проверяю строку и решаю, не будет ли какой-либо из них renderable. Если я собираюсь иметь проблемы, я использую drawAtpoint вместо этого:

if (!isFullyDisplayable)
 {
  CGContextShowGlyphsAtPoint(context, pt.x, pt.y, realGlyph, 1);
 }
 else {
  // fall back on less flexible font rendering for difficult characters

  NSString *b = [gv text];
  NSString *c = [b substringWithRange:NSMakeRange(j,1)];

  [c drawAtPoint:pt withFont:[UIFont fontWithName:@"Helvetica-Bold" size:16.0]];


 }

У кого-либо есть какие-либо указатели относительно того, почему текст исчезает?

Как только drawAtPoint используется, мой вывод отладки лавинно рассылается:

<Error>: CGContextGetShouldSmoothFonts: invalid context
<Error>: CGContextSetFont: invalid context
<Error>: CGContextSetTextMatrix: invalid context
<Error>: CGContextSetFontSize: invalid context
<Error>: CGContextSetTextPosition: invalid context
<Error>: CGContextShowGlyphsWithAdvances: invalid context

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

10
задан Brian Tompsett - 汤莱恩 2 June 2015 в 20:45
поделиться

1 ответ

Отвечая на свой вопрос:

NSString drawAtPoint: withFont: использует стек контекста, и откуда я вызывал этот метод, стек был пуст . Завершение вызова с помощью

UIGraphicsPushContext(context); and UIGraphicsPopContext();

помогло.

17
ответ дан 3 December 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: