Swift:removeFromSubview在动画之前发生

时间:2014-12-13 22:22:49

标签: ios animation swift jquery-animate

我有一个小设置,我将MPMoviePlayerController设置为视频背景。我试图让它在更新/更改时顺利过渡。这是我目前的代码。 BTW,newBackground.view.alpha最初为0。

let oldBackground = currentBackground

self.view.insertSubview(newBackground.view, aboveSubview: oldBackground.view)
  UIView.animateWithDuration(1.5 as NSTimeInterval, animations: {
    newBackground.view.alpha = 1
    }, completion: {
      finished in
      oldBackground.view.removeFromSuperview()
      println("The subview should be removed now")
  })

执行此操作时,会在newBackground开始淡入之前立即删除oldBackground.view。但是,println会在动画完成后发生。我不明白为什么removeFromSuperview会立即发生,但println会在我预期的时候发生。如果我删除oldBackground.view.removeFromSuperview(),动画会淡入并且看起来很好(但是视图显然没有删除,它只是位于newBackground后面。)

编辑:奇怪的是,它似乎在模拟器中按预期工作。在我的iPhone 6 Plus上运行每次都会给我带来问题。我已经卸载并从Xcode重新运行它,问题仍然存在。

如果有人对我有任何建议,我会非常高兴。谢谢。

2 个答案:

答案 0 :(得分:0)

我想在动画期间执行newBackground.view.alpha = 1时,它会将背景带到可见性并覆盖oldBackground。

答案 1 :(得分:0)

当您将新子视图放在旧子视图上方时,旧的子视图会转到后面。这在动画代码开始之前发生。在插入之前,请确保新子视图的alpha为0。如果你想要淡出动画,你应该将oldBackground alpha设置为0。

像这样:

let oldBackground = currentBackground

newBackground.view.alpha = 0

self.view.insertSubview(newBackground.view, aboveSubview: oldBackground.view)
  UIView.animateWithDuration(1.5 as NSTimeInterval, animations: {
    newBackground.view.alpha = 1
    oldBackground.view.alpha = 0
    }, completion: {
      finished in
      oldBackground.view.removeFromSuperview()
      println("The subview should be removed now")
  })