Обнаружить изменение страницы в UICollectionView
Я пытался найти этот вопрос некоторое время, но не смог найти ответ на эту проблему.
Моя проблема в том, что у меня есть UICollectionView
, а направление прокрутки Horizontal
с Paging Enabled
. Моя проблема заключается в том, что я хочу сохранить привязку к текущему номеру страницы, на котором находится пользователь, поэтому я создал переменную int
и теперь хочу добавить или вычесть ее на 1 каждый раз, когда пользователь щелкает вправо или влево. Я попытался использовать делегат scrollView
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
но когда пользователь щелкает вправо или влево, он вызывается столько раз, сколько количество столбцов на странице в UICollectionView
плюс оно не сообщит мне, будет ли пользователь переходить на следующую страницу или предыдущий.
Ответы
Ответ 1
Использование:
- (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);
}
И если вы не используете какой-либо pageControl, то ceil(currentPage)
будет вашим текущим номером страницы.
Ответ 2
** 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.
}
Ответ 3
u может получить текущую страницу, как показано ниже, индекс будет от 0
до (total page - 1)
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
CGFloat pageWidth = scrollView.frame.size.width;
int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
NSLog(@"Current page -> %d",page);
}
Ответ 4
Основываясь на ответе @Shankar BS, я реализовал его так, как в Swit. Имейте в виду, что CollectionViewDelegate соответствует 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)")
}
Ответ 5
Swift 2.2
func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
let x = collectionView.contentOffset.x
let w = collectionView.bounds.size.width
let currentPage = Int(ceil(x/w))
print("Current Page: \(currentPage)")
}