2015-09-26 61 views
3

我的动画速度太快了。我正在做一个模式匹配游戏,我有4个不同颜色的UIViews。我想要一个人眨眼,然后等一会儿,再有一个UIView眨眼。视图闪烁了我的标签标识符,我已经为每个视图设置了不同的值(1,2,3,4)。看起来他们都在同一时间。我已经尝试调整animateWithDuration函数的值,这似乎没有帮助。动画过快。似乎无法减慢

这里是我的打印输出,所以你可以看到它执行正确的顺序...

gary 
3 
gary 
2 
gary 
2 
gary 
3 
gary 
2 



func beginGame() { 
    var level = 5 

    for _ in 1...level { 
     self.randomNumber = Int(arc4random_uniform(4)) + 1 
     let originalColor:UIColor = self.view.viewWithTag(randomNumber)!.backgroundColor! 
     UIView.animateWithDuration(1, delay: 0, options: UIViewAnimationOptions.CurveEaseOut, animations: { 


      self.view.viewWithTag(self.randomNumber)!.backgroundColor = UIColor.whiteColor() 
       self.view.viewWithTag(self.randomNumber)!.backgroundColor = originalColor 

      print("gary") 


      }, completion: nil) 
     print(randomNumber) 

     enemyArray.append(randomNumber) 

    } 
} 

//新代码

func beginGame(){ 

    var level = 5 

    for _ in 1...level { 
     self.randomNumber = Int(arc4random_uniform(4)) + 1 
     let originalColor:UIColor = self.view.viewWithTag(randomNumber)!.backgroundColor! 
     UIView.animateWithDuration(1, delay: 4, options: UIViewAnimationOptions.CurveEaseOut, animations: { 


      self.view.viewWithTag(self.randomNumber)!.backgroundColor = UIColor.whiteColor() 
       self.view.viewWithTag(self.randomNumber)!.backgroundColor = originalColor 

      print("gary") 


      }, completion: nil) 

     print(randomNumber) 

     enemyArray.append(randomNumber) 

    } 




} 
+0

您是否尝试过在animateWithDuration方法中增加延迟,以便四个不同的动画不会同时触发? –

+0

是的,我有。我玩过两个值。 –

+0

你基本上是在同一时间做所有的动画。 for循环将所有动画排队,然后它们全部同时运行。增加每个延迟,等待直到前一个完成。 – rmaddy

回答

0

听什么人都告诉你。如果您使用for循环并创建所有延迟值均为0的多个动画,则它们都将同时运行。不要这样做。

相反,使用代码更是这样的:

let pauseBetweenAnimations = 1.0 
for step in 1...level { 
    self.randomNumber = Int(arc4random_uniform(4)) + 1 
    let originalColor:UIColor = 
    self.view.viewWithTag(randomNumber)!.backgroundColor! 
    UIView.animateWithDuration(1, delay: (step - 1) * pauseBetweenAnimations, 
    options: UIViewAnimationOptions.CurveEaseOut, 
    animations: 
    //the rest of your code goes here... 

这将使每个后续动画一前一后开始1秒。如果1秒太长,请更改pauseBetweenAnimations的值。

+0

我很抱歉,但代码也没有工作。它不喜欢步骤-1。你可以添加更多的功能,所以我可以复制并粘贴,看看它会按逻辑工作吗?我也调整了过去的延迟,也没有效果。 –

+0

您可能需要添加一个类型转换以将(步骤-1)转换为Double。试试这个:'UIView.animateWithDuration(1,delay:Double(step-1)* pauseBetweenAnimations –

+0

我认为它喜欢Int的不是前一次尝试的两倍,step甚至有一个数值吗? –