2013年8月15日木曜日

UICollectionViewでエンドレススクロールを実現する方法

タネは簡単で(1)先頭と最後にコンテンツの複製を作っておき追加(2)最後へスクロールしたら先頭へ移動・先頭へスクロールしたら最後へ移動する。

スクロール指示のタイミングは -[UIScroll scrollViewDidEndDecelerating:] でハンドリングする。
-(void)scrollViewDidEndDecelerating:(UIScrollview *)scrollview {

    // Calculate where the collection view should be at the right-hand end item
    float contentOffsetWhenFullyScrolledRight = self.collectionView.frame.size.width * ([self.dataArray count] -1);

    if (scrollView.contentOffset.x == contentOffsetWhenFullyScrolledRight) {

        // user is scrolling to the right from the last item to the 'fake' item 1.
        // reposition offset to show the 'real' item 1 at the left-hand end of the collection view

        NSIndexPath *newIndexPath = [NSIndexPath indexPathForItem:1 inSection:0];

        [self.collectionView scrollToItemAtIndexPath:newIndexPath atScrollPosition:UICollectionViewScrollPositionLeft animated:NO];

    } else if (scrollView.contentOffset.x == 0)  {

        // user is scrolling to the left from the first item to the fake 'item N'.
        // reposition offset to show the 'real' item N at the right end end of the collection view

        NSIndexPath *newIndexPath = [NSIndexPath indexPathForItem:([self.dataArray count] -2) inSection:0];

        [self.collectionView scrollToItemAtIndexPath:newIndexPath atScrollPosition:UICollectionViewScrollPositionLeft animated:NO];

    }
}
なおこの方法が使えるのは paging=YES のケースだけ。



0 件のコメント:

コメントを投稿