Почему изображение PNG иногда размывается в зависимости от его положения в виде
Я заметил, что при размещении изображений PNG в представлении с помощью IB и/или анимации этих изображений в различных положениях вокруг представления изображение иногда может получить небольшое размытие.
в большинстве случаев я могу исправить размытость, добавив .5 пикселей в положение изображения.
[lbLiteButton.layer setPosition:CGPointMake(140.5,159.5)];
иногда мне приходится настраивать как x, так и y, как указано выше. Иногда мне нужно только настроить x или y.
Я помню где-то читал, что это связано с размер изображения и как работает основная анимация и что-то делать с половиной пикселей... но я нигде не могу найти статью!?
проблема с ".Решение "5 пикселей" отличается для каждого изображения PNG в зависимости от размера, поэтому вы не можете повторно использовать пользовательскую анимацию, потому что вам нужно настроить ее для каждого другого изображения.
- есть ли способ гарантировать, что независимо от того, где я размещаю или анимирую свой образ, я не буду размываться позиции?
- есть ли у кого-нибудь информация об этом?
Спасибо!
3 ответов
на position
свойство слоя представления основано на его anchorPoint
собственность. По умолчанию это (0.5, 0.5), что означает, что точка привязки слоя находится в его центре. Если ваш вид (и его слой) имеют нечетное число пикселей в ширину или высоту, установка интегрального значения для позиции приведет к тому, что начало представления будет неинтегрированным, что приведет к размытости, которую вы видите.
чтобы обойти это, вы можете выяснить интегральную версию своей позиции, взяв желаемое центральное положение вида, вычитание половины ширины вида, округление этого значения, затем добавление половины ширины вида и повторение для высоты. Вы также можете установить anchorPoint
для слоя вашего вида в (0,0) и позиционировать вид на основе его происхождения.
есть вероятность, что это также может быть связано с несоосностью супервизора. Чтобы диагностировать это, можно использовать основной инструмент анимации в инструментах и выбрать опцию цветовые несоосные изображения. Он должен покрасьте любые виды или слои, которые не выровнены по пикселям в приложении.
У меня был аналогичный опыт с размытым текстом в метке, и это было вызвано супервизором моих меток, имеющих субпиксельное смещение. Таким образом, несмотря на то, что местоположение в пределах этого вида было интегральным, при настройке на координаты его родителя оно имело смещение в полпикселя или около того, вызывая размытие.
Если вы получаете это только иногда, хотя, что может быть не так. Ваш супервизор перемещается или находится в странном положении? Я бы сказал, что лучше всего выяснить, точные обстоятельства, при которых это происходит.
IB имеет ошибку, когда иногда (не часто) просто движущиеся элементы будут делать их нечеткими - вы видите это чаще всего с UILabels и UIImageViews (хотя это, вероятно, именно то, что наиболее очевидно). Я уверен, что это связано с упомянутым выше, но очень часто для задания местоположения (Х,Y) координаты элемента на 0,0, а затем вернуться к исходным значениям. Обычно это решает проблему (опять же, это в IB).