等到任务完成后再运行它

时间:2014-11-01 14:01:51

标签: swift task wait uiviewanimation complete

我试图多次为我的视图背景设置动画。例如(当然它需要是动态解决方案)持续4秒,每秒它将从白色到黑色动画。我们的期望: 第二:

  1. 白色到黑色到白色
  2. 白色到黑色到白色
  3. 白色到黑色到白色
  4. 白色到黑色到白色
  5. 我尝试使用for甚至延迟(调度延迟),它只会运行一次 而不是停止。这是我试过的。

    for var index = 0; index < 3; ++index {
        UIView.animateWithDuration(0.33333, delay: 0.333333, options: UIViewAnimationOptions.CurveEaseIn, animations: { () -> Void in
            println(elapsedTime)
            self.view.backgroundColor = UIColor.blackColor()
        }) { (completed : (Bool)) -> Void in
            UIView.animateWithDuration(0.333333, animations: { () -> Void in
                self.view.backgroundColor = UIColor.whiteColor()
            })
        }
    }
    

    关于如何运行这些命令的任何建议,等到它们完成并再次运行它们?

1 个答案:

答案 0 :(得分:1)

使用for循环,您基本上设置了所有四个动画,以便同时运行。如果您将该动画代码设为函数,则可以从白色动画的完成块中递归调用它:

func animateBackground(times: Int) {
    if times == 0 { return }

    let blackAnimation = { self.view.backgroundColor = UIColor.blackColor() }
    let whiteAnimation = { self.view.backgroundColor = UIColor.whiteColor() }
    UIView.animateWithDuration(0.33333, delay: 0.333333, options: UIViewAnimationOptions.CurveEaseIn, animations: blackAnimation) {
        completedBlack in // completion block 1

        UIView.animateWithDuration(0.333333, animations: whiteAnimation) {
            completedWhite in // completion block 2
            self.animateBackground(times - 1)
        }
    }
}

初始调用如下:

animateBackground(4)