首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测UICollectionView中的页面更改

问检测UICollectionView中的页面更改
EN

Stack Overflow用户
提问于 2015-04-08 14:42:29
回答 4查看 30.2K关注 0票数 35

我试着找到这个问题一段时间,但没有找到这个问题的答案。我的问题是我有一个UICollectionView,滚动方向是带有Paging Enabled的Horizontal。我的问题是,我想保留用户所在的当前页码的大头针,所以我创建了一个int变量,现在想在用户每次向右或向左滑动时将其加减1。我试过使用scrollView的委托

代码语言:javascript
复制
- (void)scrollViewDidScroll:(UIScrollView *)scrollView

但是当用户向右或向左滑动时,它被调用的次数与UICollectionView中一个页面上的列数加上它不会让我知道用户是转到下一个页面还是上一个页面。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-04-08 14:49:47

使用:

代码语言:javascript
复制
- (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)将是您当前的页码。

票数 44
EN

Stack Overflow用户

发布于 2016-03-24 07:49:57

根据@Shankar BS的回答,我在Swit中实现了如下代码。请记住,CollectionViewDelegate符合ScrollViewDelegate:

代码语言:javascript
复制
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    let pageWidth = scrollView.frame.size.width
    let page = Int(floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1)
    print("page = \(page)")
}
票数 11
EN

Stack Overflow用户

发布于 2015-04-08 15:09:58

你可以得到如下所示的当前页面,索引将是从0到(total page - 1)

代码语言:javascript
复制
-(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);
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29507675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档