Исправление размытого текста после CGAffineTransformMakeScale

У меня есть несколько представлений со многими UILabels на представлениях. (все построено в Интерфейсном Разработчике).

Затем я пытаюсь создать "меньшую" копию моего представления, когда вы зажимаете экран.

Для этого применяю:

view.transform = CGAffineTransformMakeScale(.5, .5);

а затем я также регулирую рамку обзора.

Проблема в том, что после преобразования текст во всех моих UILabels становится «размытым». Он не остается идеальным в пикселях, как при полномасштабном просмотре.

Есть ли способ увеличить пикселизацию меток после трансформации?


person Adam Johnson    schedule 23.04.2012    source источник


Ответы (1)


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

Если вы действительно хотите, чтобы ваш текст или изображения были четкими с новым масштабным коэффициентом, вам нужно будет вручную изменить их размер и заставить их перерисовывать вместо применения преобразования. Я описал один способ, которым я сделал это, с помощью UIView, размещенного в UIScrollView, в этом ответе.

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

person Brad Larson    schedule 23.04.2012