在动画完成之前调用 UIView 动画完成

Posted

技术标签:

【中文标题】在动画完成之前调用 UIView 动画完成【英文标题】:UIView animate finished called before animation finished 【发布时间】:2017-01-02 12:48:41 【问题描述】:

我正在尝试创建一个animation,其中视图首先向下动画,然后从超级视图中删除,我的代码如下所示:

UIView.animate(withDuration: 5, delay: 5, options: .allowAnimatedContent, animations: 
        NSLog("Animation started")
        self.scrollView.setContentOffset(CGPoint(x:0,y:-500), animated: true)

    , completion: (finished: Bool) in
        if finished
            NSLog("Animation stopped")
            self.view.removeFromSuperview()
        
    )

由于持续时间是5,所以应该在 5 秒后调用完成,否则我错了?

在这种情况下,finished 在动画完成并删除视图之前被调用,并且动画显然根本没有显示,因为视图已被删除。

这里是NSLog

2017-01-02 17:39:37.649 [1581:26706] Animation started
2017-01-02 17:39:37.652 [1581:26706] Animation stopped

finished 在不到一秒的时间内被调用

【问题讨论】:

【参考方案1】:

尝试将setContentOffset:函数animated设置为false

UIView.animate(withDuration: 5, delay: 5, options: .allowAnimatedContent, animations: 
    NSLog("Animation started")
    self.scrollView.setContentOffset(CGPoint(x:0,y:-500), animated: false)
, completion: (finished: Bool) in
    if finished
        NSLog("Animation stopped")
        self.view.removeFromSuperview()
    
)

【讨论】:

以上是关于在动画完成之前调用 UIView 动画完成的主要内容,如果未能解决你的问题,请参考以下文章

swift UIView 动画完成处理程序首先调用

UIView 动画完成块在其他动画开始时触发

核心动画立即调用完成函数

MonoTouch - UIView.Animate 完成回调未在按钮 touchUpInside 委托内调用

在 awakeFromNib 上调用 UIView animate withDuration 不会执行动画

iOS - UIView 动画的限制?