如何使UIScrollView在动画期间发送scrollViewDidScroll消息

fis*_*ear 6 iphone animation uiscrollview ios

当用户手动滚动浏览我的UIScrollView时,我的委托的scrollViewDidScroll方法会在动画期间重复调用,并使用contentOffset的新更新值.当我调用"[scrollView setContentOffset:320 animated:YES"时,则以相同的方式调用委托方法.我认为正常滚动速度对于用户体验来说太快了,所以在"animatedWithDuration:"块中包含了一个"[scrollView setContentOffset:320]",就像Apple在UIView类引用中推荐的那样.

但是......现在我的scrollViewDidScroll方法只在动画开始时被调用一次,带有最终值,而不再是动画期间.当我使用旧的"beginAnimations:"方法时,我得到相同的效果.

那么......有谁知道如何解决这个问题?

顺便说一句,UIScrollView的"setContentOffset"方法显示相同的行为.它曾经在动画中被调用,现在只被调用一次.

fis*_*ear 6

感谢Fichek的暗示,我已经开始工作了.就像Fichek说的那样,在动画过程中你不会收到任何已更改属性的通知.所以诀窍是,确保依赖于已更改属性的任何内容同时也是动画.您需要在与原始属性相同的块中设置其动画.如果你然后在动画上设置"UIViewAnimationOptionAllowUserInteraction",那么相同属性的任何正在进行的用户交互仍然可以工作 - 而且令人惊讶的是,我不得不说.

对于我的具体案例 - 保持拖动视图静止,而UIScrollView滚动到下面 - 这是我设置动画的方式:

[UIView animateWithDuration:0.5 delay:0
                    options:UIViewAnimationOptionAllowUserInteraction
                 animations:^{
    [theScrollView setContentOffset:offset];
    // compute newCenter from the new offset
    theDraggedView.center = newCenter;
} completion:^(BOOL finished) {}];
Run Code Online (Sandbox Code Playgroud)