UICollectionView
iPad アプリケーションで初めて使用しています。UICollectionView
アプリケーションのサイズとセルのサイズが同じになるように設定しました。つまり、一度に表示されるセルは 1 つだけです。
問題:ユーザーがスクロールするときに、UICollectionView
どのセルが表示されているかを知る必要があり、変更時に他の UI 要素を更新する必要があります。このためのデリゲート メソッドは見つかりませんでした。どうすればこれを実現できますか?
コード:
[self.mainImageCollection setTag:MAIN_IMAGE_COLLECTION_VIEW];
[self.mainImageCollection registerClass:[InspirationMainImageCollectionCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
[self.mainImageFlowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
[self.mainImageFlowLayout setMinimumInteritemSpacing:0.0f];
[self.mainImageFlowLayout setMinimumLineSpacing:0.0f];
self.mainImageFlowLayout.minimumLineSpacing = 0;
[self.mainImageCollection setPagingEnabled:YES];
[self.mainImageCollection setShowsHorizontalScrollIndicator:NO];
[self.mainImageCollection setCollectionViewLayout:self.mainImageFlowLayout];
私が試したこと:
UICollectionView
に準拠しているためUIScrollView
、ユーザーのスクロールが終了したときにUIScrollViewDelegate
メソッドを取得しました
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
しかし、上記の関数内で、現在の表示セルのインデックスを取得するにはどうすればよいでしょうかUICollectionView
?
ベストアンサー1
indexPathsForVisibleItems
ほとんどの状況ではうまくいくかもしれませんが、複数のインデックス パスを持つ配列が返される場合があり、必要なものを見つけるのが難しい場合があります。そのような状況では、次のようにすることができます。
CGRect visibleRect = (CGRect){.origin = self.collectionView.contentOffset, .size = self.collectionView.bounds.size};
CGPoint visiblePoint = CGPointMake(CGRectGetMidX(visibleRect), CGRectGetMidY(visibleRect));
NSIndexPath *visibleIndexPath = [self.collectionView indexPathForItemAtPoint:visiblePoint];
これは、コレクション ビュー内の各アイテムが画面全体を占める場合に特に効果的です。
Swiftバージョン
let visibleRect = CGRect(origin: collectionView.contentOffset, size: collectionView.bounds.size)
let visiblePoint = CGPoint(x: visibleRect.midX, y: visibleRect.midY)
let visibleIndexPath = collectionView.indexPathForItem(at: visiblePoint)