を使用し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];
}
}