在Xcode 7.3.1上的tvOS中,我使用UIFocusAnimationCoordinator的addCoordinatedAnimations函数的地方之一是在动画之前运行完成:
if (coordinator != nil) {
var tempDidAnimate: Bool = false // breakpoint 1
coordinator!.addCoordinatedAnimations({
self.myFunctionThatDoesntGetCalled() // breakpoint 2
tempDidAnimate = true
}, completion: {
() in
if tempDidAnimate == false {
print("whaaaat?!??") // breakpoint 3
self.myFunctionThatDoesntGetCalled()
}
})
}
被击中的断点顺序是1,3。从不2.。
这种对if tempDidAnimate == false
的粗暴使用确实解决了这个问题,但我不明白为什么会出现这个问题。
任何想法都可能出错?
一个想法:我已经在堆栈中的addCoordinatedAnimations块中...我不这么认为,但是堆栈很复杂......看不到任何通过代码检查的方法。
答案 0 :(得分:0)
tl;博士:是的,我已经进入了一个动画块#$& ^ @#$!
好的,事实证明,在我的"聪明地"重构的代码,我忘记了我调用动画块来重置任何当前活动的自动布局动画(通过请求持续时间为0的新动画)。然后在完成时,我的代码被调用...因为我正式已经在动画块中,操作系统拒绝执行上面的主动画块,并直接跳到完成。不知道这种操作系统行为是否记录在任何地方。