Подтвердить что ты не робот

Качество изображения графического ядра Retina

Попытка понять, почему я получаю низкокачественный рисунок с помощью CGContextShowTextAtPoint? См. Прикрепленное изображение: img

Буква "W" рисуется с использованием CGContextShowTextAtPoint на CALayer и выглядит очень пикселизированной. Кнопка рядом с ней - стандартная кнопка и выглядит так, как ожидалось. Я хотел бы, чтобы текст был hi-res.

enter image description here

4b9b3361

Ответ 1

По умолчанию ваш CALayer не передает свой контент Quartz при более высоком разрешении экрана Retina. Вы можете включить это, используя следующий код:

if ([layer respondsToSelector:@selector(setContentsScale:)])
{
    layer.contentsScale = [[UIScreen mainScreen] scale];
}

Это повлияет не только на рендеринг текста, но и на весь ваш чертеж Quartz в CALayers, поэтому вам нужно будет сделать это для всех ваших слоев с пользовательским содержимым Quartz.

Ответ 2

Использует ли CGContextScaleCTM какие-либо результаты для вас? При работе с графическим контекстом, примерно так:

CGFloat scale = [[UIScreen mainScreen] scale];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextScaleCTM(context, scale, scale);

Ответ 3

Группа функций управляет тем, как Core Graphics выделяет шрифты:

  • CGContextSetAllowsAntialiasing
  • CGContextSetAllowsFontSmoothing
  • CGContextSetAllowsFontSubpixelPositioning
  • CGContextSetAllowsFontSubpixelQuantization

Ответ 4

Быстрая версия:

textLayer.contentsScale = UIScreen.mainScreen().scale

введите описание изображения здесь