Detect page change in UICollectionView
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.}
Use :
- (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);}
And if you are not using any pageControl, then ceil(currentPage)
will be your current page number.
Based on @Shankar BS 's answer I've implemented it like this in Swit. Keep in mind that CollectionViewDelegate conforms to 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)")}