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

Iphone 如何使UIScrollView在动画期间发送scrollViewDidScroll消息,iphone,ios,animation,uiscrollview,Iphone,Ios,Animation,Uiscrollview,当用户手动滚动my UIScrollView时,我的代理的scrollViewDidScroll方法会在动画期间重复调用,并使用contentOffset的新更新值。 当我调用“[scrollView setContentOffset:320 animated:YES”时,将以相同的方式调用委托方法。 我认为正常的滚动速度对于用户体验来说太快了,所以在“animatedWithDuration:”块中附上了“[scrollView setContentOffset:320]”,正如苹果在UIVi

当用户手动滚动my UIScrollView时,我的代理的scrollViewDidScroll方法会在动画期间重复调用,并使用contentOffset的新更新值。 当我调用“[scrollView setContentOffset:320 animated:YES”时,将以相同的方式调用委托方法。 我认为正常的滚动速度对于用户体验来说太快了,所以在“animatedWithDuration:”块中附上了“[scrollView setContentOffset:320]”,正如苹果在UIView类参考中所建议的那样

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

有人知道怎么解决这个问题吗


顺便说一下,“setContentOffset”UIScrollView的方法显示了相同的行为。它过去在动画过程中被调用,现在只被调用一次。

多亏了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) {}];

这更像是一种解决方法。我通知代表scrollViewDidScroll:中的滚动更改,这无法通过此方法实现。此处发布了类似的问题: