Но, тем не менее, этот подход (в приведенном выше примере) недостаточно хорош в некоторых случаях. Потому что мы только визуализировали ограниченную область в UIScrollView.
Пользователь может использовать различные жесты в UIScrollView: перетаскивание или переключение. С помощью перетаскивания предварительно визуализированных 8 маленьких UIViews достаточно для покрытия области прокрутки в большинстве случаев. Но при переключении UIScrollView может прокручивать очень большую область, когда пользователь делает быстрое движение, и эта область абсолютно пуста (потому что мы не отображали ее) во время прокрутки. Даже если мы можем отобразить нужный контент после того, как UIScrollView прекратит прокрутку, пробел во время прокрутки не очень удобен для пользователя.
Для некоторых приложений это нормально, например, карта Google. Поскольку данные не могут быть загружены сразу. Ожидание перед загрузкой является разумным.
Но если данные локальные, мы должны по возможности устранить эту пустую область. Таким образом, предварительный рендеринг области, которая будет прокручиваться, имеет решающее значение. В отличие от UITableView, UIScrollView не имеет возможности сообщить нам, какая ячейка будет отображаться и какая ячейка будет переработана. Итак, мы должны сделать это сами. Метод [UIScrollViewDelegate scrollViewWillEndDragging: withVelocity: targetContentOffset:] будет вызываться, когда UIScrollView начинает замедляться (на самом деле scrollViewWillBeginDecelerating - это метод, который вызывался до замедления, но в этом методе мы не знаем, какая информация будет отображаться или прокручиваться) , Поэтому, основываясь на UIScrollView.contentOffset.x и параметре targetContentOffset, мы можем точно знать, где начинается UIScrollView и где остановится UIScrollView, а затем предварительно визуализировать эту область, чтобы сделать прокрутку более плавной.