Качество изображения графического ядра Retina
Попытка понять, почему я получаю низкокачественный рисунок с помощью CGContextShowTextAtPoint? См. Прикрепленное изображение:
![img]()
Буква "W" рисуется с использованием CGContextShowTextAtPoint на CALayer и выглядит очень пикселизированной. Кнопка рядом с ней - стандартная кнопка и выглядит так, как ожидалось. Я хотел бы, чтобы текст был hi-res.
![enter image description here]()
Ответы
Ответ 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
![введите описание изображения здесь]()