【问题标题】:addCoordinatedAnimations animation block not runningaddCoordinatedAnimations 动画块未运行
【发布时间】:2016-08-23 17:01:00
【问题描述】:

在 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 块中...我不这么认为,但堆栈很复杂...看不到任何通过代码检查的方法。

【问题讨论】:

  • 你在哪里添加这个?应将自定义焦点动画添加到 didUpdateFocusInContext ,其中 coordinator 参数不是可选的。
  • 我从 didUpdateFocusInContext 开始,然后深入调用多个级别的块和选择器/函数。

标签: ios swift uikit tvos


【解决方案1】:

tl;dr: 是的,我已经在动画块中了#$&^@#$!

好的,原来在我“聪明”的重构代码中,我忘记了我正在调用一个动画块来重置任何当前活动的自动布局动画(通过请求一个持续时间为 0 的新动画)。然后在那个完成中,我上面的代码被调用......因为我正式已经在一个动画块中,操作系统拒绝执行上面的主动画块,并直接跳到完成。不知道这种操作系统行为是否记录在任何地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-21
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 2019-09-01
    相关资源
    最近更新 更多