2009-03-19 4 views
8

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

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

Например:

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

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

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

Результаты в четком тексте.

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

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

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

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

+0

Смотрите мой ответ здесь: http://stackoverflow.com/a/16822238/308315 – iwasrobbed

ответ

9

Я решил это.

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

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

+0

ключ к проблеме прав, хотя округление - не лучшая техника. Многие раунды могут сдвигать или изменять размер кадра. Лучшим подходом было бы сохранить исходный кадр в качестве свойства, а затем установить его обратно. Это гарантирует отсутствие сдвигов или изменений –

2

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

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

+0

Спасибо. Я округлил все точки, ширину и высоту. Также округлены точки для свойства центра. Еще нет кубиков. – 2009-03-19 22:30:16

3

Возможно, вы захотите посмотреть NSIntegralRect(), он делает то, что вы хотите.

+1

NSIntegralRect() - это только Mac, а не iOS. – azdev

+1

Вы, конечно, используете [CGRectIntegral()] (https://developer.apple.com/library/IOs/documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html#//apple_ref/c/func/ CGRectIntegral). – EightyEight

0

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

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

2

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

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

Надеется, что это помогает ....

+0

Это помогло мне, спасибо! – Mike

Смежные вопросы