【问题标题】:How to make UIScrollView send scrollViewDidScroll messages during animations如何让 UIScrollView 在动画期间发送 scrollViewDidScroll 消息
【发布时间】:2011-11-11 07:18:48
【问题描述】:

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

但是...现在我的 scrollViewDidScroll 方法仅在动画开始时以最终值调用一次,而不再在动画期间调用。当我使用旧的“beginAnimations:”方法时,我得到了同样的效果。

所以...有人知道如何解决这个问题吗?

顺便说一下,UIScrollView 的“setContentOffset”方法显示了相同的行为。它曾经在动画期间被调用,现在只被调用一次。

【问题讨论】:

    标签: iphone ios animation uiscrollview


    【解决方案1】:

    感谢 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) {}];
    

    【讨论】:

    猜你喜欢
    • 2012-04-29
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多