iphone - 如何让 UIScrollView 在动画期间发送 scrollViewDidScroll 消息

标签 iphone ios animation uiscrollview

当用户手动滚动我的 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/

相关文章:

iphone - iOS 5 中 UINavigationBar 中的截止标题标签

iphone - 从 tableView 返回单元格时出错

android - 使用 Bazel 和 j2objc 在 iOS 和 Android 之间共享代码

jquery循环和css webkit动画

objective-c - 要 float 的 TextField 文本(Objective-C)

iphone - 创建一个黑色透明模态视图 Controller

ios - 隐藏导航栏而不抬起 View

ios - SKReceiptRefreshRequest 每次都询问密码

wpf - 为什么 WPF 中的 TextBox.Text 不可设置动画?

javascript - 如何使用 Javascript 将 <div> 从 0% 递增到 70% 进行动画处理?