iPhone UIScrollView / setContentOffset很奇怪

时间:2010-01-30 16:47:38

标签: iphone cocoa-touch uikit uiscrollview

我对setContentOffset有一个奇怪的问题,我似乎无法解决: 我正在尝试构建一个“无尽的”滚动视图,所以我想在某个位置重置内容偏移量。 使用下面的代码,setContentOffset将在x = 160px时调用。 如果我拖动滚动视图,我的日志看起来像这样:

抵消:158

抵消:159

抵消:160

抵消:80

抵消:160

当我继续拖动时,会执行我的setContentOffset(到80) UIScrollView似乎已经忘记了它并继续在160。 甚至更奇怪:当我设置动画:是的它有效。也许是时间问题? 当我从scrollViewDidScroll中调用setContentOffset时,将再次调用scrollViewDidScroll。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
 NSInteger tileNo = floor(scrollView.contentOffset.x / 80);
 NSLog(@"offset: %f, tile: %d, lastTile: %d", scrollView.contentOffset.x, tileNo, lastTileNo);

 if (tileNo > lastTileNo) {
      [scrollView setContentOffset:CGPointMake(80, 0) animated:NO];
 }

 lastTileNo = tileNo;

}

感谢您帮助我,   斯蒂芬

3 个答案:

答案 0 :(得分:3)

刚从Apple的sombody得到这个答案:“这是一个已知的问题,将在未来的iPhone SDK版本中修复。如果你能够测试它,你应该发现它已经修复了当前的测试版如果你仍然遇到麻烦,请提交新的错误。“

答案 1 :(得分:0)

这里也是同样的问题。

调用setContentOffset是一种不一致:在scrollViewDidScroll:里面,它只更新tableview的contentOffset,直到下一次调用scrollViewDidScroll:。

我意识到这个错误只发生在用户没有拖动tableview时(仅减速)。

在我的情况下,仅在用户拖动时更新解决了问题。

希望它有所帮助。

答案 2 :(得分:-1)

问题是UIScrollView的设计并不是无穷无尽的。它的内容大小有限。你确定CGFLOAT_MAX(340282346638528859811704183484516925440)对于你的滚动视图来说太小了吗?