Что вызывает закадровый рендеринг, смешивание и layoutSubviews в iOS?

На какие именно характеристики я должен обратить внимание?

Я хочу список с как можно большим количеством примеров. Или список лучших практик.

Ответы на вопрос(1)

Решение Вопроса
Внеэкранный рендеринг / Рендеринг на процессоре

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

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

Следующее запустит закадровый рендеринг:

Любой слой с маской ()layer.mask

Любой слой с /layer.masksToBoundsview.clipsToBounds быть правдой

Любой слой сlayer.allowsGroupOpacity установить ДА иlayer.opacity меньше 1,0

Когда вид (или слой) требует рендеринга вне экрана?

Любой слой с теньюlayer.shadow*).

Советы о том, как исправить:https://markpospesel.wordpress.com/tag/performance/

Любой слой сlayer.shouldRasterize быть правдой

Любой слой с,,layer.cornerRadiuslayer.edgeAntialiasingMasklayer.allowsEdgeAntialiasing

Любой слой сlayer.borderWith а также ?layer.borderColor

Отсутствует ссылка / доказательство

Текст (любой вид, в том числе,UILabelCATextLayerCore Text, так далее).

Большая часть рисунка вы делаете сCGContext вdrawRect:, Даже пустая реализация будет отображена за кадром.

смешивание

resizableImage может вызвать смешивание.

Избегание смешанных слоев при использовании resizableImages на iOS

Любой слой, который неopaque и имеетbackgroundColor сalpha менее чем 1,0

Любой слой сalpha менее чем 1,0

Любой слой сlayer.content или любойUIImageView сUIImage имеющий альфа-канал

раскладка

Следующие вещи сработаютlayoutSubviews быть вызванным на UIView:

измененияbounds триггеры на тот же вид и супер-вид

измененияframe триггеры на тот же вид и супер-вид

измененияtransform или жеlayer.transform срабатывает на суперпредставлении

Примечание: ям, ссылаясь на реальные изменения, где значения на самом деле меняется

Противоречивые эти изменения не вызываютlayoutSubviews быть названным: , , , , .centerlayer.positionlayer.zPositionlayer.anchorPointlayer.anchorPointZ

Ссылка:https://github.com/hfossli/LayoutSubviewsInconsistency

Общие советы по улучшению производительности

Часто это лучшеblend чем .render offscreen

Рассмотреть возможность использованияdrawRect: вместо того, чтобы иметь представление с несколькими метками и подпредставлениями.

Нарисуйте на фоне очереди вUIImage или же .CGImageRef

Рисовать наCGLayer (который лучше кэшируется наGPU по сравнению сUIImage) и нарисуйте в нем все, что хотите.

Обновление'т:http://iosptl.com/posts/cglayer-no-longer-recommended/

Выровняйте свою иерархию

Повторное использование просмотров - дон»создавать и добавлять новые при прокрутке

Естьopaque просмотры со сплошным цветом фона

Избегайте настроекalpha а такжеlayer.opacity до менее чем 1,0

включитьlayer.shouldRasterize (используйте с осторожностью). Мне нравится избегать этого лично, но в некоторых случаях он работает быстрее, поскольку растры слоя будут кэшироваться и использоваться повторно. Помните, если вы включитеshouldRasterize на слоях, которые часто изменяют свое содержимое или содержимое подслоев, производительность будет падать, поскольку iOS будет растеризовывать слой при каждом изменении.

связи

http://iosinjordan.tumblr.com/post/56778173518/help-my-tables-dont-scroll-smoothly

https://developer.apple.com/library/IOS/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/DrawingTips/DrawingTips.html

Ваш ответ на вопрос