【问题标题】:how to determine if UIScrollView flicks to next page when paging分页时如何确定UIScrollView是否滑动到下一页
【发布时间】:2012-08-13 17:29:18
【问题描述】:

我使用 UIScrollView 来显示大量图像。对于内存问题,我一次只加载三个图像。当用户轻弹到下一个(或上一个)时,我将移动两个图像并加载一个新图像。

首先,我使用 scrollViewDidEndDecelerating 方法来确定 UIScrollView 是更改为下一页、上一页还是当前页。但是当你快速连续滑动时,scrollViewDidEndDecelerating 方法不会收到任何消息,也就是没有被调用,而 scrollViewDidEndDragging:willDecelerate 仍然会收到消息。因为拖动是如此之快,以至于之前的减速被忽略了。

所以我想知道我在哪里可以知道视图是否会改变以及当我快速滑动时如何判断变化?在scrollViewDidEndDragging:willDecelerate 方法还是其他一些方式?

【问题讨论】:

    标签: objective-c ios cocoa-touch uiscrollview


    【解决方案1】:

    我不会依赖scrollViewDidEndDecelerating 方法,但会实现scrollViewDidScroll 协议并在超过50% 的上一页/下一页可见时更新页面:

    CGFloat pageWidth = self.scrollView.bounds.size.width;
    int page = floor((self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1; 
    self.pageControl.currentPage = page;
    

    编辑

    页面控件结合滚动视图在tut中有很好的解释

    【讨论】:

    • 我会试试的。我在 pagecontrol 示例中看到了这种方法。该方法被如此频繁地调用,让我感到困惑。
    • 你也只是想在滚动时设置新页面还是只检测页面的变化(然后我应该编辑我的答案)
    • 我将加载一个新的并移动两个图像。
    • 既然每页有 3 张图片,为什么不移动 3 张图片?
    • 您也可以考虑使用 GMGridView(github.com/gmoledina/GMGridView)。这是一个编写良好的网格支持库。他们处理分页。
    【解决方案2】:
    -(void) scrollViewDidScroll:(UIScrollView *)scrollViewl
    {
      tempPageNO=PageNo;
      CGFloat pageWidth = scrollViewl.frame.size.width;
      int f=((scrollViewl.contentOffset.x-pageWidth/2)/pageWidth)+1;
    
      //----------newPageNo----------------
      PageNo=f;
    
      if (tempPageNO!=PageNo) {
        NSLog(@"it's true when page is changed.");
        NSLog(@"page NO %i",PageNo);
      }
    }        
    

    【讨论】:

      【解决方案3】:

      Swift 4 版本的 tiguero 的答案。希望它能为某人节省 0.5 分钟。

      let pageWidth = scrollView.bounds.size.width
      let page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1
      self.pageControl.currentPage = Int(page)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-02
        • 1970-01-01
        • 2016-06-12
        • 1970-01-01
        • 1970-01-01
        • 2023-04-04
        相关资源
        最近更新 更多