Почему изображение PNG иногда размывается в зависимости от его положения в виде

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

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

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

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

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

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

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

Спасибо!

3 ответов


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

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

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


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

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


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