当用户手动滚动我的 UIScrollView 时,我的委托(delegate)的 scrollViewDidScroll 方法在动画期间被重复调用,并使用新更新的 contentOffset 值。 当我调用“[scrollView setContentOffset:320 animated:YES”时,委托(delegate)方法将以相同的方式被调用。 我认为正常的滚动速度对于用户体验来说太快了,因此按照 Apple 在 UIView 类引用中的建议,在“animatedWithDuration:” block 中包含了一个“[scrollView setContentOffset:320]”。
但是...现在我的 scrollViewDidScroll 方法仅在动画开始时以最终值调用一次,而在动画期间不再调用。当我改用旧的“beginAnimations:”方法时,我得到了同样的效果。
所以...有人知道如何解决这个问题吗?
顺便说一句,UIScrollView 的“setContentOffset”方法显示了相同的行为。以前在动画中调用,现在只调用一次。
最佳答案
多亏了 Fichek 的提示,我才让它开始工作。正如 Fichek 所说,您不会在动画期间收到任何有关更改属性的通知。所以诀窍是,确保任何依赖于更改的属性的东西也同时被动画化。您需要在与原始属性相同的 block 中设置它们的动画。 如果您随后在动画上设置“UIViewAnimationOptionAllowUserInteraction”,那么相同属性的任何正在进行的用户交互仍然有效 - 而且出奇的好,我不得不说。
对于我的具体案例 - 保持拖动的 View 静止,而 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) {}];
关于iphone - 如何让 UIScrollView 在动画期间发送 scrollViewDidScroll 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7319906/