暂停时调用UIViewPropertyAnimator完成

时间:2019-01-16 23:41:31

标签: ios swift uikit uiviewpropertyanimator

我还没有使用过UIViewPropertyAnimator(仍然是一个老式的积木人),并且看到了一些我无法解释的行为,并且文档并没有真正提供任何见解。 / p>

即使动画制作者在启动后立即暂停,为什么动画制作者的完成代码块却以finalPosition的{​​{1}}调用?

.end

输出:

let view = UIView()
let animator = UIViewPropertyAnimator(duration: 4, curve: .linear, animations: {
    view.alpha = 0
})

animator.addCompletion { position in
    print("done")
    switch position {
    case .start: print("start")
    case .current: print("current")
    case .end: print("end")
    }
}

animator.startAnimation()
print("starting")
animator.pauseAnimation()
print("pausing")

2 个答案:

答案 0 :(得分:1)

@matt所暗示的问题是,您的视图不在可见的UIWindow中,因此动画立即完成。如果注释掉animator.pauseAnimation()语句,则会得到相同的输出。

如果您正在使用游乐场,则可以通过将游乐场页面的view设为liveView来解决此问题:

import PlaygroundSupport
import UIKit

let view = UIView()
PlaygroundPage.current.liveView = view

// etc.

答案 1 :(得分:0)

如果您从Apple的开发人员网站阅读了addCompletion的文档, 参数之一是finalPosition。您可以使用该值确定 动画是在开头,结尾还是中间停止。 并调用pauseAnimation将触发该完成块,并在中间位置的某个位置。

  

参数完成当动画结束时要执行的块。   此块没有返回值,并采用以下参数:

     

finalPosition动画的结束位置。使用此值来   确定动画是在开始,结束还是停止   在中间的某个地方。