Подклассы UIView эффективно - PullRequest
1 голос
/ 23 октября 2011

Ребята, у меня возникли проблемы с наследованием UIView Я создаю IconView. Просто это контейнер для некоторых других подпредставлений. В моем IconView у меня есть этот iVar: UIImageView _background UIImageView _icon UILabel _iconLabel.

Когда я инициализирую IconView, я настраиваю эти 3 iVar с изображениями, текстом и некоторыми кварцевыми эффектами, такими как roundCorner и Shadow, а затем добавляю их в самообзор. Все в порядке, но если я вставлю часть этого IconView (т.е. 10) в пустое представление прокрутки, эффект прокрутки не будет гладким. Я пробовал перед вставкой тысячи простых UIViews в scrollview, и анимация прокрутки работает отлично. Только с 10 из моего IconView анимация прокрутки работает очень плохо.

Я мог бы по-другому подходить к сохранению UIImages вместо UIImageViews и рисовать его внутри drawRect: метод, но в этом случае я потеряю свойство Autoresizing и эффект Quartz.

Кто-нибудь предлагает? Спасибо, Габриэле.

Ответы [ 2 ]

1 голос
/ 23 октября 2011

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

Прежде чем списывать их, вы можете попробовать установить для свойства CALayer shouldRasterize значение YES. Это позволяет кварцу визуализировать тень только один раз и сохранить ее в буфере. Посмотрите, как это происходит.

1 голос
/ 23 октября 2011

К сожалению, UIScrollView замедляется довольно быстро.Есть много постов и статей на эту тему, например этот вопрос и этот (дефектный) пост блога вместе с это пример кода .В видео WWDC 2010 года также есть три сессии на тему «Оптимизация производительности в iOS», которые я настоятельно рекомендую посмотреть.Подводя итоги, сделайте выводы: используйте как можно меньше подпредставлений и старайтесь избегать прозрачных пленок.

Хорошо, так много для общего разговора «Производительность в ScrollViews», теперь для вашего случая: у меня была та же проблема, я использовал все советы из статей и видео выше, и хотя они улучшили производительность, он простоне было достаточноЯ, как и вы, использовал закругленные углы на одном изображении и обнаружил, что это абсолютно убивает производительность.Просто их отключение помогло больше, чем все остальное.Вероятно, то же самое с эффектами тени.

Теперь, скорее всего, вы хотите сохранить эти закругленные углы.Я бы посоветовал вам создать копию ваших изображений (или взять оригинал, если это возможно), а затем манипулировать ими напрямую, используя эти классные классы .Таким образом, эффекты будут применены только один раз.Это прекрасно работает для меня.Для ваших теней вы, вероятно, можете просто создать их в Photoshop и использовать их в новом ImageView.

Если этого недостаточно, вам следует попробовать кэшировать IconViews, например, TableViewCells кэшируются,если вы этого еще не сделали.

...