Вчера натолкнулся на интересное кино от Apple. Называется advanced-scrollview-techniques. Первая часть (Infinite scrolling) посвящена бесконечной прокрутке IUScrollView. Для тех, кому лень смотреть (или просто проблемы с английским), вкратце расскажу идею. Для простоты рассмотрим случай горизонтального скроллинга. Если кому понадобится еще и вертикальный, допилить будет несложно.
- Наследуемся от UIScrollView и задаем contentSize раз в 5 шире самого view (в примере 5000). Высота содержимого не слишком принципиальна, пусть будет равна высоте вьюхи.
- Выставляем contentOffset так, чтобы середина контента приходилась на середину view.
- Перегружаем layoutSubviews следующим образом:
- смотрим на contentOffset и выясняем на сколько он сместился от первоначального положения (середины)
- переносим contentOffset обратно. Если в результате скролла он сместился влево, значит двигаем его вправо. Ну, и наоборот.
- смещаем все subview на то же расстояние в ту же сторону. Только не используйте при этом свойство UIView subviews. Дочерние вьюхи лучше хранить в отдельном массиве потому, что скролл-индикаторы - это тоже subviews.
Ну и, конечно, не забывайте удалять view, которые уже вышли из области видимости. Память-то на iPhone не бесконечная :)