【发布时间】:2019-12-06 17:00:09
【问题描述】:
当使用 UIViewPropertyAnimator 并在 stopAnimation(false) 之后调用 finishAnimation(at:) 时:
您会得到以下崩溃日志:
- [UIViewPropertyAnimator dealloc]
或者,如果您在调试器中捕获断言(通过为 Objective-C 异常设置断点)
断言失败 -[UIViewPropertyAnimator finishAnimationAtPosition:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKitCore_Sim/UIKit-3900.12.16/UIViewPropertyAnimator.m:1981
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“finishAnimationAtPosition:只应在停止的动画师上调用!”
如果您设法捕捉到断言(除非您在发布运行时也捕捉到这些断言,否则崩溃日志并没有那么有用),您会看到它抱怨 finishAnimation 在不间断的动画制作器上被调用。
但我的代码显示动画制作器总是在调用 finishAnimation 之前停止。
animator.stopAnimation(false)
animator.finishAnimation(at: .start)
什么可能导致这个崩溃,在调用stopAnimation之后应该总是停止状态?
【问题讨论】:
-
在我看来这是
UIViewPropertyAnimator的实现中的一个错误。文档明确指出“如果为 withoutFinishing 参数指定 false,则可以随后调用 finishAnimation(at:) 方法来执行动画制作者的最终操作”。