快速闪烁的UIButton(不点击)

问题描述 投票:0回答:1

我正试图快速制作一个simon记忆游戏,其中4个按钮依次闪烁,用户必须记住顺序和猜测。现在,我正在生成诸如[绿色,红色,绿色,蓝色,黄色]之类的随机序列,并且在生成这些序列时,我要使绿色按钮闪烁,然后依次为红色,绿色等等。我该怎么做呢?

    @IBOutlet weak var green: UIButton!
    @IBOutlet weak var red: UIButton!
    @IBOutlet weak var yellow: UIButton!
    @IBOutlet weak var blue: UIButton!
    enum Block {
        case green
        case red
        case yellow
        case blue
    }

    //Block button action
    @IBAction func greenButton() {
        if playerTurn && (blocksPressed < signals.count ){
            blocksPressed += 1
            guesses.append(Block.green)
            guess()
        }
    }

    @IBAction func redButton() {
        if playerTurn && (blocksPressed < signals.count) {
            blocksPressed += 1
            guesses.append(Block.red)
            guess()
        }
    }

    @IBAction func yellowButton() {
        if playerTurn && (blocksPressed < signals.count) {
            blocksPressed += 1
            guesses.append(Block.yellow)
            guess()
        }
    }

    @IBAction func blueButton() {
        if playerTurn && (blocksPressed < signals.count ){
            blocksPressed += 1
            guesses.append(Block.blue)
            guess()
        }
    }
    let randomSource = GKARC4RandomSource() //for random number generation
    var signals:[Block] = []

    func giveSignal() {
        disableButton()
        signals = []
        for _ in 0...levelNum  {
            let randomSignal:Int = randomSource.nextInt(upperBound: 4)
            switch randomSignal {
                //Green
                case 0:
                    signals.append(Block.green)
                //Red
                case 1:
                    signals.append(Block.red)
                //Yellow
                case 2:
                    signals.append(Block.yellow)
                //Blue
                case 3:
                    signals.append(Block.blue)
            default:
                break
            }

        }
        let finalSeq:String = makeString()
        statusBar.text = finalSeq
    }
ios swift
1个回答
1
投票

这里是伪代码。

有两个部分。

Firstly,动画。您应该使用KeyFrame动画。

这里是对应的apple doc

第二,Block枚举的信号,您应该使用它。

这里有点棘手,有点算法。

switch case适合您。

       let blink: (Block) -> Void = {(option) in
            switch option {
            case .green:
                self.green.backgroundColor = UIColor.green
            case .red:
                self.red.backgroundColor = UIColor.red
            case .yellow:
                self.yellow.backgroundColor = UIColor.yellow
            case .blue:
                self.red.backgroundColor = UIColor.blue
            }
        }


        let total: TimeInterval = 1.2

        UIView.animateKeyframes(withDuration: total, delay: 0, options: .repeat, animations: {
            let proportion: TimeInterval = 0.25
            UIView.addKeyframe(withRelativeStartTime: total * proportion * 0, relativeDuration: total * proportion) {
                blink(self.signals.removeFirst())
            }
            UIView.addKeyframe(withRelativeStartTime: total * proportion * 1, relativeDuration: total * proportion) {
                blink(self.signals.removeFirst())
            }

            UIView.addKeyframe(withRelativeStartTime: total * proportion * 2, relativeDuration: total * proportion) {
                blink(self.signals.removeFirst())
            }

            UIView.addKeyframe(withRelativeStartTime: total * proportion * 3, relativeDuration: total * proportion) {
                blink(self.signals.removeFirst())
            }

        }) { (_) in }

0
投票

您已经有一个array of randomly generated colors,只需要通过它们loop,并根据颜色在相应的颜色按钮上进行闪烁动画即可。

for signal in signals {
    switch signal {
    case .green:
        blink(greenButton) //Blink your button based on the color.
    default:
        break
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.