Используйте или извлекайте из UIScrollView для представления, которое содержит все плитки. Либо реализуйте метод делегата - (void)scrollViewDidScroll:(UIScrollView *)scrollView;
, либо переопределите метод - (void)setContentOffset:(CGPoint)contentOffset
. Установите размер содержимого представления прокрутки, как если бы присутствовали все плитки.
Когда прокрутится представление прокрутки, определите, какие плитки будут отображаться на экране. Затем либо используйте схему утилизации, как UITableView с ячейками, либо просто добавьте новые созданные плитки по мере необходимости и удалите те, которые находятся дальше всего от видимой области, когда вы достигли своей квоты памяти. Ваш пример показывает, что плитки размером 2х3 полностью видны, поэтому вам нужно оставить как минимум 4x5 плиток.
Если у вас есть два столбца плиток и горизонтальная прокрутка отсутствует (не видно из рисунка), вы можете просто использовать UITableView напрямую и реализовать пользовательский UITableViewCell, который отображает две плитки.
Если вы наследуете UIScrollView, лучше всего было бы отразить интерфейс, используемый UITableView, с dataSource и делегировать обратные вызовы. Вы бы имели numberOfRows :, numberOfColumns: и tileForRow: column: вместо numberOfRows :, numberOfSections: и cellForIndexPath:, но принципал тот же. Похоже, вы можете использовать плитки фиксированного размера, что значительно упрощает работу.