Точка рисования:и нарисуйте правильно:размытый текст

StackOverflow https://stackoverflow.com/questions/660904

Вопрос

При рисовании строк с использованием drawAtPoint:, drawInRect:и даже настройка текстового свойства UILabels - иногда текст может выглядеть слегка размытым.

Я склонен использовать Helvetica в большинстве мест, и я замечаю, что определенные размеры шрифта приводят к некоторому уровню размытости, как в симуляторе, так и на устройстве.

Например:

UIFont *labelFont = [UIFont fontWithName:@"Helvetica-Bold" size:12];

Приведет к тому, что результирующая метка будет содержать слегка размытый текст.

UIFont *labelFont = [UIFont fontWithName:@"Helvetica-Bold" size:13];

В результате получается четкий текст.

Мой вопрос в том, почему это происходит?И это просто вопрос выбора оптимального размера шрифта для гарнитуры?Если да, то каковы оптимальные размеры шрифта?

Обновить:Кажется, что, возможно, причиной размытости является не размер шрифта.Возможно, что центр прямой кишки представляет собой дробную точку.Вот комментарий, который я нашел на форумах разработчиков Apple:

Проверьте положение.Скорее всего, это изображение размером в дробный пиксель.Измените центр на целочисленное значение.

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

Это было полезно?

Решение

Я решил эту проблему.

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

То есть. NSLog(@"%@", NSStringFromCGRect(theRect)) чтобы определить, какая точка рисуется на дробном пикселе.Тогда звони round() по этому поводу.

Другие советы

Возможно, вы захотите взглянуть на NSIntegralRect(), он делает то, что вы хотите.

Простите мое невежество, если это неверно, я ничего не знаю ни об iPhone, ни о Cocoa.

Если вы запрашиваете, чтобы текст располагался по центру прямоугольника, вам также может потребоваться убедиться, что ширина и / или высота прямоугольника равны четному числу.

У меня тоже была эта проблема, но мое решение другое и может кому-то помочь.Моей проблемой было размытие текста после изменения размера UIView объект через TouchesBegan и CGAffineTransformMakeScale, затем возвращаемся к CGAffineTransformIdentity в TouchesEnded.

Я пробовал как изменять размер текста, так и округлять центральные точки x и y, но ни то, ни другое не сработало.Решение моей проблемы состояло в том, чтобы использовать четные размеры для ширины и высоты моего UIView !!

Надеюсь , это поможет ....

Из моих экспериментов следует, что некоторые шрифты не отображаются четко при определенных размерах.например ,Helvetica-Жирный шрифт не отображается "." хорошо при 16,0 f, но они четкие при 18,0f.(Если присмотреться, верхний пиксель "." размыт.)

После того, как я заметил это, меня раздражал каждый раз, когда я вижу этот UIView, поскольку он отображается динамически.

В моем случае я нарисовал текст на пользовательском CALayer и получилось довольно размыто.Я решил это, установив contentScale с соответствующим значением:

Цель-C:

layer.contentsScale = [UIScreen mainScreen].scale;

Быстрый:

layer.contentsScale = UIScreen.main.scale
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top