[英]Stop all UIButtons from working when I tap 1 UIButton swift
[英]Swift blink UIButtons (not on tap)
我正在嘗試在 swift 中制作一個 simon memory 游戲,其中 4 個按鈕依次閃爍,用戶必須記住順序和猜測。 現在我正在生成類似 [Green, Red, Green, Blue, Yellow] 的隨機序列,當我生成這些時,我想讓綠色按鈕閃爍,然后是紅色,然后是綠色,等等。 我該怎么做呢?
@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
}
這是偽代碼。
有兩個部分。
首先,animation。 您應該使用 KeyFrame animation。
這是相應的蘋果文檔
其次,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 }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.