を使用しUICollectionViewて、一連のサムネイルをすばやくスクロールしています。スクロールが終了したら、現在のサムネイルのより大きな高解像度バージョンを表示したいと思います。
ユーザーがスクロールを完了したことを検出するにはどうすればよいですか? 私は を実装していますdidEndDisplayingCellが、それは特定のセルがスクロールされたときにのみわかります。スクロールモーションが実際にいつ完了するかはわかりません。
を使用しUICollectionViewて、一連のサムネイルをすばやくスクロールしています。スクロールが終了したら、現在のサムネイルのより大きな高解像度バージョンを表示したいと思います。
ユーザーがスクロールを完了したことを検出するにはどうすればよいですか? 私は を実装していますdidEndDisplayingCellが、それは特定のセルがスクロールされたときにのみわかります。スクロールモーションが実際にいつ完了するかはわかりません。
NS_CLASS_AVAILABLE_IOS(6_0) @interface UICollectionView : UIScrollView
UICollectionViewのサブクラスですUIScrollView。したがって、デリゲートを設定して実装UIScrollViewDelegateした場合は、 と同じ方法でこれを検出できるはずですUIScrollView。
例:-
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;
documentationに従って、上記のメソッドは、スクロールビューがスクロールの動きの減速を終了したことを通知する必要があります。
基本をカバーするために、これらの UIScrollViewDelegate メソッドの両方を実装する必要があります。場合によっては、減速しscrollViewDidEndDeceleratingない (呼び出されない) 場合があります。たとえば、ページがその場で完全にスクロールされる場合などです。その場合は、すぐに更新を行ってくださいscrollViewDidEndDragging。
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
if (!decelerate) {
[self updateStuff];
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
[self updateStuff];
}
スウィフト 3 バージョン:
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
// Your code here
}
可視インデックスパスを使用する場合:
- (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];
}
}