具有发布版本设置的Swift动画完成错误

时间:2015-01-30 12:52:09

标签: ios iphone swift ios8

有两个视图控制器,Initial和modal。我们在初始控制器中有动画,在模态控制器中也有动画。每个动画都有完成块。我们设置构建方案Run - >构建配置以发布。运行应用程序,转到模态控制器并运行动画。动画后(在模态控制器中)调用Initial控制器中的动画完成块,而不是Modal控制器中的完成块。有没有人也经历过这个?有什么建议吗?

Sample project here (产品 - >方案 - >编辑方案 - >运行 - >构建配置:发布)

1 个答案:

答案 0 :(得分:1)

这绝对是一个优化错误。

我发现一个快速的解决方法是将completions:个关闭转换为@objc_block

的ViewController:

    UIView.animateWithDuration(0.3,
        delay: 0.0,
        options: UIViewAnimationOptions.CurveEaseInOut,
        animations: { () -> Void in
            self.rectangleView.alpha = 1.0
        },
        completion: { (complete) -> Void in
            println("111 Hello ViewController 1")
        } as @objc_block (Bool) -> Void
        //   ^^^^^^^^^^^^^^^^^^^^^^^^^^
    )

ViewController2:

    UIView.animateKeyframesWithDuration(duration,
        delay: 0.0,
        options: UIViewKeyframeAnimationOptions.CalculationModeLinear,
        animations: { () -> Void in
            UIView.addKeyframeWithRelativeStartTime( 0.0,
                relativeDuration: (duration / 2),
                animations: { () -> Void in
                    self.rectangleView.alpha = 0.1
                }
            )
            UIView.addKeyframeWithRelativeStartTime(
                (duration / 2),
                relativeDuration: (duration / 2),
                animations: { () -> Void in
                    self.rectangleView.backgroundColor = UIColor.blueColor()
                }
            )
        },
        completion: { (complete) -> Void in
            println("Hello ViewController 2")
        } as @objc_block (Bool) -> Void
        //   ^^^^^^^^^^^^^^^^^^^^^^^^^^
    )