web-dev-qa-db-ja.com

UICollectionViewでページの変更を検出する

しばらくこの質問を見つけようとしましたが、この問題の答えを見つけることができませんでした。私の問題は、UICollectionViewがあり、スクロール方向がHorizontalで、Paging Enabled。私の問題は、ユーザーがいる現在のページ番号のタックを保持したいので、int変数を作成し、ユーザーが右または左にスワイプするたびに1ずつ加算または減算することです。 scrollViewのデリゲートを使用してみました

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

しかし、ユーザーが右または左にスワイプすると、UICollectionViewのページの列数と同じ回数だけ呼び出され、ユーザーが次のページに移動したかどうかを知らせません前のもの。

24
Ahsan Ebrahim

使用する :

_- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    CGFloat pageWidth = collectionView.frame.size.width;
    float currentPage = collectionView.contentOffset.x / pageWidth;

    if (0.0f != fmodf(currentPage, 1.0f))
    {
        pageControl.currentPage = currentPage + 1;
    }
    else
    {
        pageControl.currentPage = currentPage;
    }

    NSLog(@"Page Number : %ld", (long)pageControl.currentPage);
}
_

また、pageControlを使用していない場合は、ceil(currentPage)が現在のページ番号になります。

39
itsji10dra

Swift 3 Xcode 8.2

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        let x = scrollView.contentOffset.x
        let w = scrollView.bounds.size.width
        let currentPage = Int(ceil(x/w))
        // Do whatever with currentPage.
}
30
Ahmed Safadi

@Shankar BSの回答に基づいて、Switでこのように実装しました。 CollectionViewDelegateはScrollViewDelegateに準拠していることに注意してください。

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    let pageWidth = scrollView.frame.size.width
    let page = Int(floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1)
    print("page = \(page)")
}
9
Andrej

以下のような現在のページを取得できます。インデックスは0から(total page - 1)

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
 {
    CGFloat pageWidth = scrollView.frame.size.width;
    int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
    NSLog(@"Current page -> %d",page);
}
8
Shankar BS

Swift 2.2

 func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
    let x = collectionView.contentOffset.x
    let w = collectionView.bounds.size.width
    let currentPage = Int(ceil(x/w))
    print("Current Page: \(currentPage)")
}
3
Jonni Åkesson