drawAtPoint: и drawInRect: размытый текст - PullRequest
8 голосов
/ 19 марта 2009

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

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

Например:

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

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

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

Результат - четкий текст.

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

ОБНОВЛЕНИЕ: кажется, что это не размер шрифта, который вызывает размытость. Может случиться так, что центр прямоугольника является дробной точкой. Вот комментарий, который я нашел на форумах разработчиков Apple:

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

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

Ответы [ 6 ]

9 голосов
/ 24 марта 2009

Я решил это.

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

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

3 голосов
/ 25 марта 2009

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

2 голосов
/ 30 сентября 2010

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

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

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

2 голосов
/ 20 марта 2009

Прошу прощения за мое невежество, если это неверно, я ничего не знаю об iPhone или Какао.

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

0 голосов
/ 16 марта 2018

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

Objective-C:

layer.contentsScale = [UIScreen mainScreen].scale;

Swift:

layer.contentsScale = UIScreen.main.scale
0 голосов
/ 06 июля 2009

Из моих экспериментов некоторые шрифты не отображаются четко при определенных размерах. например Helvetica-Bold не отображает "." хорошо в 16.0f, но они ясны в 18.0f. (Если вы посмотрите внимательно, верхний пиксель «.» Размыт.)

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

...