Ваше прокручивание с 20 подзонами является причиной вашей проблемы. Хотя мне придется увидеть сам код, чтобы доказать это, но эта же проблема возникла со мной, когда я попытался создать представление прокрутки, имеющее много подзонов, причем конечный результат ведет себя так же, как UITableView
(помните, UITableView
является подклассом UIScrollView
) , примечание: доказательство того, что это причина, проста. Просто удалите 20 подпрограмм UIScrollView, а затем запустите анимацию. Если отставание ушло, то это достаточное доказательство.
Отметьте, что UITableView
может иметь тысячи строк .. но способ, которым он разработан, заключается в повторном использовании ячеек, которые больше не отображаются на экране (т. Е. Перерабатывать виды из пула, а не создавать новые виды каждый раз, когда они необходимы). другими словами, он не может позволить себе хранить в памяти больше строк, чем то, что будет отображаться на экране, иначе оно станет ломающимся.
Итак, вернитесь к своему прокручиванию с 20 подзонами и определите способ как-то использовать только просмотры, отображаемые на экране, и вместо того, чтобы освобождать и распределять новые подпрограммы каждый раз, повторно использовать их так же, как это делает UITableView
.
Пожалуйста, обратите внимание на это interesting post того, как UITableView
на самом деле создаются за кулисами .. Я уверен, что это даст вам идеи о том, как оптимизировать свои scrollview
так как к избежать отставаний.
обновление: Основываясь на деталях вашего зрения hiarchy в комментариях .. это то, что я хотел бы сделать
- я бы сделать переход, но только для отображения п количество
UIImageViews
которые вписываются в экран (т. е. 7 в вашем случае) .. в UIAnimation
обработчик блока завершения, я бы добавил остальные виды
- Если этого недостаточно, я загружу изображения в представления в обработчике завершения UIAnimation.
- Если этого недостаточно, я также подключу 2 UIButtons и 2 UILabels к subviews в обработчике завершения.
Вы видите рисунок здесь? идея - это целенаправленная пробная версия и ошибка: удалите самые дорогие операции один за другим из перехода и поместите его после завершения перехода. При желании вы можете заменить UIViews, которые были возвращены в конец анимации с помощью наполнителей (т. Е. Подумайте, что это заполнитель для изображений, прядильщик и т. Д.Выбор этих подстановок действительно зависит от принципов UX и того, что вы считаете эстетичным для пользователя)
Как это выглядит на устройстве? – CaptJak
@CaptJak Он начинается гладко, и есть заметное отставание около 2/3 пути через – GameDevGuru
Ну, вы не реализовали код неправильно. то, как у вас есть, должно быть плавным. Выполняете ли вы какие-либо другие действия одновременно с анимацией? – CaptJak