如何确定UIScrollView在分页时是否轻弹到下一页

时间:2012-08-17 09:03:45

标签: objective-c ios cocoa-touch uiscrollview

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

首先,我使用scrollViewDidEndDecelerating方法来确定UIScrollView是否更改为下一页,上一页还是当前页。但是当你快速连续地轻弹时,scrollViewDidEndDecelerating methord将不会收到任何消息,这意味着不会被调用,而scrollViewDidEndDragging:willDecelerate仍然会收到消息。因为拖动很快,以前的减速被忽略。

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

3 个答案:

答案 0 :(得分:7)

我不会依赖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

中得到了很好的解释

答案 1 :(得分:0)

-(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);
  }
}        

答案 2 :(得分:0)

快速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)