65

を使用しUICollectionViewて、一連のサムネイルをすばやくスクロールしています。スクロールが終了したら、現在のサムネイルのより大きな高解像度バージョンを表示したいと思います。

ユーザーがスクロールを完了したことを検出するにはどうすればよいですか? 私は を実装していますdidEndDisplayingCellが、それは特定のセルがスクロールされたときにのみわかります。スクロールモーションが実際にいつ完了するかはわかりません。

4

6 に答える 6

132
NS_CLASS_AVAILABLE_IOS(6_0) @interface UICollectionView : UIScrollView

UICollectionViewのサブクラスですUIScrollView。したがって、デリゲートを設定して実装UIScrollViewDelegateした場合は、 と同じ方法でこれを検出できるはずですUIScrollView

例:-

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;

documentationに従って、上記のメソッドは、スクロールビューがスクロールの動きの減速を終了したことを通知する必要があります。

于 2013-02-15T23:15:13.717 に答える
60

基本をカバーするために、これらの UIScrollViewDelegate メソッドの両方を実装する必要があります。場合によっては、減速しscrollViewDidEndDeceleratingない (呼び出されない) 場合があります。たとえば、ページがその場で完全にスクロールされる場合などです。その場合は、すぐに更新を行ってくださいscrollViewDidEndDragging

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
  if (!decelerate) {
    [self updateStuff];
  }
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
  [self updateStuff];
}
于 2013-10-24T18:36:46.810 に答える
9

スウィフト 3 バージョン:

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    // Your code here
}
于 2017-06-20T13:49:08.337 に答える
0

可視インデックスパスを使用する場合:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    [self scrollingFinish];
}
- (void)scrollingFinish {


    if([self.collectionView indexPathsForVisibleSupplementaryElementsOfKind:UICollectionElementKindSectionHeader]){
        NSIndexPath *firstVisibleIndexPath = [[self.collectionView indexPathsForVisibleSupplementaryElementsOfKind:UICollectionElementKindSectionHeader] firstObject];
        [self.collectionView scrollToItemAtIndexPath:firstVisibleIndexPath atScrollPosition:UICollectionViewScrollPositionTop animated:YES];
        [NSObject cancelPreviousPerformRequestsWithTarget:self];
    }
}
于 2017-08-27T21:57:25.053 に答える