Instruments сообщает, что есть «смещенные изображения», которые анимируются основной анимацией. Что это обозначает?

ОБНОВЛЕНИЕ: я видел это в Instruments.app> Core Animation.

14
Thanks 25 Май 2009 в 04:07

2 ответа

Лучший ответ

Мне бы хотелось получить больше информации о том, где вы это видите, но я подозреваю, что это относится к изображению, которое не выровнено по пикселям. Кварц позволяет рисовать с дробными пикселями (напомним, что CGPoint использует CGFloats, а не NSIntegers), но он более дорогой и имеет тенденцию создавать некоторую размытость. На самом деле вы не можете рисовать дробным пикселем, поэтому Quartz должен применить сглаживание, чтобы добиться этого. Это требует времени и, безусловно, ухудшит производительность Core Animation.

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

22
Rob Napier 29 Май 2009 в 04:00
2
Ага, вот что означает смещенное изображение.
 – 
Kriem
30 Май 2009 в 01:54
Спасибо за подсказку. Действительно, у меня были значения с плавающей запятой для координат начала кадра. После оборачивания их полом () сообщение в Insturment исчезло. Но я не мог заметить улучшения производительности. Instruments жалуется на это также при повороте UIImageView. Так что я думаю, что в этом нет ничего плохого;)
 – 
Thanks
30 Май 2009 в 02:03
Это верно, когда происходит какое-либо масштабирование - например, если ширина или высота представления изображения не соответствуют границам исходного изображения или когда к представлению применено аффинное преобразование.
 – 
Paul Alexander
11 Окт 2010 в 22:48

Неверно выровненные представления заставляют средство визуализации сглаживать перед отрисовкой.

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

Это почти всегда происходит, когда фрейм представления вычисляется (а не указывается в Interface Builder), потому что координата X, координата Y, ширина и высота CGRect являются CGFloats и, следовательно, допускают дробные значения.

Например, прямоугольник размером 100,8 на 50,1 пикселей с центром в точке (200,5, 35,5) является допустимым кадром, и ОС будет пытаться отобразить его наилучшим образом, с которым может справиться. Дополнительных накладных расходов на интерполяцию и сглаживание, требуемых только для одного пикселя, достаточно, чтобы серьезно снизить производительность на старом оборудовании.

4
Edwin 6 Апр 2012 в 01:12