2011-03-18 32 views
1

我有一个ScrollView来显示PDF页面。当我滚动时,这显示了在ScrollView中启用了分页的第二个页面。我将滚动属性的反弹属性设置为false。我想显示正在显示哪个页面的页码。为此,我使用了以下代码..如何检测页面是否在ScrollView中滚动?

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { 

if (scrollView == scrlView) { 
    if (lastContentOffsetX > scrollView.contentOffset.x) { 

     if (currentPage > 1) { 
      currentPage--; 
      self.title = [NSString stringWithFormat:@"%d/%d", currentPage, totalPages]; 
     } 
    }  
    else if (lastContentOffsetX < scrollView.contentOffset.x) { 
     if (currentPage < totalPages) { 
      currentPage++; 
      self.title = [NSString stringWithFormat:@"%d/%d", currentPage, totalPages]; 
     } 
    } 
    lastContentOffsetX = scrollView.contentOffset.x; 
} 
} 

我没有任何问题,如果我每次拖动和页面更改。有时候我拖了很短的时间,页面没有改变,保持不变。我的页码会增加/减少。

可以任何机构告诉我,如果我可以得到任何事件时滚动视图停止滚动我可以得到当前偏移量并完成我的任务。

回答

0

尝试

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 

和/或

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView 
+0

感谢Jilouc。我正在寻找这个。 – 2011-03-18 14:01:38

6

你改变你的页面数,每次用户拖动滚动视图 - 只需使用拖拽发生,你认为这样的事实网页改变了 - 并不总是如此。在你的代码中,只需根据内容偏移量和页面宽度计算当前页面。这样,您就可以计算出当前页码(从0开始):

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { 

    if (scrollView == scrlView) { 
     CGFloat xOffset = scrollView.contentOffset.x; 
     int currentPage = floor(xOffset/scrollView.bounds.size.width); 
     self.title = [NSString stringWithFormat:@"%d/%d", currentPage, totalPages]; 
    } 
} 

您也可以使用了不正确的委托方法 - 我会用scrollViewDidScroll:方法,而不是

附:要显示当前占用屏幕一半以上的页面的编号,请将代码更改为:

int currentPage = floor(xOffset/scrollView.bounds.size.width + 0.5); 
+0

这也是我可以使用但是Jilouc更加正确。 'scrollViewDidScroll'多次触发一个滚动效果,所以它的位处理过程正在进行。任何感谢帮助 – 2011-03-18 14:03:06

相关问题