0

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

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

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

4

3 回答 3

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;

编辑

页面控件与滚动视图相结合在本教程中得到了很好的解释

于 2012-08-17T09:37:31.060 回答
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);
  }
}        
于 2012-08-17T09:53:09.977 回答
0

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)
于 2018-06-22T18:36:19.280 回答