2010-04-07 2 views
5

Это не вопрос, потому что я просто решил проблему, но я думаю, что характер проблемы распространен для многих разработчиков iPhone, и решение на самом деле не было явно очевидным, поэтому я хотел поделитесь своим опытом. Чтобы сохранить формат «вопрос/ответ» StackOverflow, я собираюсь рассказать о деталях в вопросе и моем решении в ответ.Производительность прокрутки UITableView с помощью маски CALayer +

Деталь:

У меня была TableView полного клеток с двумя метками и контролем пользовательского тумблер я ставлю вместе с нуля. Если бы я спрятал управление переключением, табличное представление прокручивалось как чемпион. Тем не менее, с показанным контролем переключения, прокрутка была болезненно прерывистой/медленной на iPhone 3G. У моих табличных ячеек нет прозрачных компонентов (кроме маски для слоя), и я повторно использую ячейки.

Пользовательский переключатель управления расширяет UIButton, а его слой состоит из двух компонентов: UIImageView, который содержит скользящую «переключающую» часть переключателя и удлиненный эллипс, который используется в качестве маски, с фоном, нарисованным за слоем в -drawRect: ,

Как я исправился? Ответ скоро ...

ответ

6

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

Мое решение состоит в том, чтобы скрыть слой переключателя/маску переключателя, если он не изменяется. Когда он сидит полностью в положениях «включено» или «выключено», я скрываю слой тумблера и заменяю его изображением тумблера. Когда пользователь прикасается к переключателю, фиктивное изображение скрывается, отображается фактический компонент toggleswitch и анимация переходит в противоположное состояние. Когда анимация заканчивается, я скрываю компонент тумблера и показываю фиктивное изображение, следя за тем, чтобы изображение изменилось на текущее состояние. Это улучшило производительность прокрутки ЗНАЧИТЕЛЬНО ... Я осмелюсь сказать, что это почти так же хорошо, как родная ячейка таблицы default defaultview.

Смежные вопросы