For循环中的IOS动画。调整后的延迟但仍有问题

时间:2015-09-27 14:11:29

标签: ios swift uiviewanimation

我正在创建一个模式匹配游戏。基本上我在屏幕上有4个方形UIViews,颜色各异。我希望一个方格随机闪烁,然后另一个方格随机闪烁。例如,当游戏开始时,可​​以说随机选择一个红色框来闪烁。现在在第二次迭代中,红色框应该再次闪烁,然后是另一个随机选择的框,让它说是蓝色。所以现在我们有红色和蓝色。现在循环再次开始,现在它是红色,蓝色,绿色。这就是我想要完成的。如果这没有意义,请下载IOS游戏“Mimeo”,它应该传达我正在尝试做的事情。有人可以帮帮我吗?我没有运气,我试图在其他地方寻求帮助而没有运气。

//  Created by Gary Dorman on 9/26/15.
//  Copyright © 2015 Gary Dorman. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

var enemyArray = [Int]()
var userArray = [Int]()
var currentScore = 0
var highScore = 0
var randomNumber = 0

@IBOutlet weak var RedBox: UIView!
@IBOutlet weak var GreenBox: UIView!
@IBOutlet weak var BlueBox: UIView!
@IBOutlet weak var YellowBox: UIView!
@IBOutlet weak var ScoreLabel: UILabel!
@IBOutlet weak var TitleImageView: UIImageView!

@IBAction func startGameButton(sender: UIButton) {
    self.resetCurrentScoreAndLabel()
    self.increaseLevel()
}

func increaseLevel(){
    var delayTime = 1.0
    randomNumber = Int(arc4random_uniform(4) + 1)
    enemyArray.append(randomNumber)
    for level in 1...enemyArray.count{
       animateColorBox(self.enemyArray[level - 1], delay: delayTime)
        delayTime++
        print(enemyArray[level - 1])
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    configureBorderOnColorBoxes()
}

func configureBorderOnColorBoxes(){

    RedBox.layer.borderColor = UIColor.blackColor().CGColor
    GreenBox.layer.borderColor = UIColor.blackColor().CGColor
    BlueBox.layer.borderColor = UIColor.blackColor().CGColor
    YellowBox.layer.borderColor = UIColor.blackColor().CGColor

    RedBox.layer.borderWidth = 3
    GreenBox.layer.borderWidth = 3
    BlueBox.layer.borderWidth = 3
    YellowBox.layer.borderWidth = 3
}

func resetCurrentScoreAndLabel(){
    currentScore = 0
    ScoreLabel.text = "Score: \(currentScore)"
}

func animateColorBox(tagNumber: Int, delay: Double){
    let pauseBetweenAnimation = 1.25
    let originalColor:UIColor = self.view.viewWithTag(tagNumber)!.backgroundColor!
    UIView.animateWithDuration(1.0, delay: (delay - 1) * pauseBetweenAnimation, options: UIViewAnimationOptions.CurveEaseOut, animations: {
            self.view.viewWithTag(tagNumber)!.alpha = 0.25   
        }, completion: { finished in
            UIView.animateWithDuration(0.5, delay: (delay - 1) * pauseBetweenAnimation, options: UIViewAnimationOptions.CurveEaseOut, animations: {
                 self.view.viewWithTag(tagNumber)!.alpha = 1

        }, completion: nil)
    })
}
}

1 个答案:

答案 0 :(得分:1)

这是一个可能适合您的解决方案:

<complex>

通过这种方法,如果我从我想要的内容中正确地思考这个问题,您就可以在开始下一个视图的动画之前完成对集合中给定UIView的调光和不透明的执行。如果这对您有用,请告诉我。

编辑:

我意识到我已经取消了动画之间的暂停,但是您可以将它放在延迟区域中,以根据您的需要进行调整。

哦,我意识到我的第一篇文章没有检查敌人阵列中的值,所以让我改变一些东西。