Почему изображение в формате PNG иногда становится размытым в зависимости от его положения на виде - PullRequest
7 голосов
/ 31 января 2010

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

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

[lbLiteButton.layer setPosition:CGPointMake(140.5,159.5)];

Иногда мне нужно настроить x и y, как указано выше. Иногда мне нужно настроить только x или y.

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

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

  1. Есть ли способ гарантировать, что где бы я ни размещал или анимировал свое изображение, я не получал размытых позиций?
  2. У кого-нибудь есть информация по этому поводу?

Спасибо!

Ответы [ 3 ]

14 голосов
/ 31 января 2010

Свойство position слоя представления основано на его свойстве anchorPoint. По умолчанию это (0,5, 0,5), что означает, что точка привязки слоя находится в его центре. Если ваше представление (и его слой) имеют нечетное количество пикселей в ширину или высоту, установка интегрального значения для позиции приведет к тому, что начало представления будет нецелым, что приведет к размытости, которую вы видите.

Чтобы обойти это, вы можете выяснить интегральную версию своей позиции, взяв желаемую центральную позицию вида, вычтя половину ширины вида, округлив это значение, затем добавив половину ширины вида и повторив высота. Вы также можете установить anchorPoint для слоя вашего вида на (0,0) и расположить вид на основе его источника.

Есть вероятность, что это также может быть связано с смещением суперпредставления. Чтобы диагностировать это, вы можете использовать инструмент Core Animation в инструментах и ​​выбрать опцию Color Misaligned Images. Он должен окрашивать любые виды или слои, которые не выровнены по пикселям в вашем приложении.

2 голосов
/ 31 января 2010

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

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

1 голос
/ 31 января 2010

В IB есть ошибка, из-за которой иногда (не часто) простое перемещение элементов делает их нечеткими - вы чаще всего видите это с UILabels и UIImageViews (хотя, вероятно, именно это наиболее очевидно). Я уверен, что это каким-то образом связано с точками, упомянутыми выше, но исправление часто заключается в том, чтобы установить координаты местоположения (x, y) для элемента равными 0,0, а затем вернуться к исходным значениям. Это обычно решает проблему (опять же, это в IB).

...