设置动画时,uiscrollview setcontentoffset动画不滚动的问题:是的

Bou*_*Bob 43 iphone uiscrollview animated

这很奇怪,我想知道是否有人有任何想法?

我正在尝试滚动UIScrollView以响应iPad上的按钮按下.

如果我做:

CGPoint currentOff = scrollView.contentOffset;
currentOff.x+=240;
[scrollView setContentOffset:currentOff animated: NO];
Run Code Online (Sandbox Code Playgroud)

滚动视图按预期跳转到所需位置,但我希望它滚动.但是,当我这样做时:

CGPoint currentOff = scrollView.contentOffset;
currentOff.x+=240;
[scrollView setContentOffset:currentOff animated: YES];
Run Code Online (Sandbox Code Playgroud)

然后它什么都没做!我有另一个滚动视图,它正常工作并按setContentOffset:YES预期响应,所以我很困惑.关于为什么滚动可能不会发生的任何想法都是最受欢迎的!

此外,使用时- (void)scrollViewDidScroll:(UIScrollView *)sender 根本没有收到任何东西,animated:YES但在animated:NO使用时会被调用!

Phi*_*rin 80

我也发生了这种情况,并最终做了这个解决方法:

[UIView animateWithDuration:.25 animations:^{
    self.scrollView.contentOffset = ...;
}];
Run Code Online (Sandbox Code Playgroud)

  • 我遇到了同样的问题,这个解决方法也适用于我!谢谢! (2认同)
  • 我不确定,我认为这是一个动画版本不起作用的错误. (2认同)

aep*_*yus 7

从个人经验来看,当setContentOffset:在动画有机会运行之前被多次调用时会出现此问题.

我没有完全追查这个问题,但我相信问题是这样的:

setContentOffset:调用animated来设置新的偏移值.setContentOffset:随后使用相同的参数调用,这将取消动画.它还注意到新参数与旧参数相同,因此即使动画尚未运行,也不需要做任何事情.

上面的解决方案以某种方式打破了这个循环,但也许一个较少的解决方案是在代码中放置断点并消除多个调用.