gpt4 book ai didi

swift - 如何通过发送者以外的标签调用特定的 UIButton?

转载 作者:行者123 更新时间:2023-12-04 10:39:02 27 4
gpt4 key购买 nike

在一个简单的内存游戏中,我有一个结构体,它定义了两张被点击的卡片,并在变异函数中返回整数 firstFlippedCard 和 secondFlippedCard。

如果这些与另一个属性不匹配,我希望两张卡都“翻转”。我为此做了一个转换功能 - 但是,我只能使用以下逻辑使最后一个点击的按钮切换回来:

    @IBAction func cardsPress(_ sender: UIButton) {

flip(sender: sender)

if cardBrain.checkFirstCard(card: sender.tag - 1) == true {
//stay flipped
} else if cardBrain.checkForMatch(card: sender.tag - 1).match == true {
//stay flipped
} else {
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1), execute: {
self.backFlip(sender: sender)
})
}


}

请注意,多个 UIButton 链接到 cardPress。我怎样才能让它们都翻转而不仅仅是发件人?

最佳答案

添加属性以跟踪 previousButton按下。然后使用这个属性来翻转当前 senderpreviousButton .最后设置previousButton返回 nil在翻转它或决定保持翻转之后。

var previousButton: UIButton?
var waitForFlip = false

@IBAction func cardsPress(_ sender: UIButton) {

// ignore button input while waiting for cards to unflip
guard !waitForFlip else { return }

flip(sender: sender)

if cardBrain.checkFirstCard(card: sender.tag - 1) {
//stay flipped
previousButton = sender
} else if cardBrain.checkForMatch(card: sender.tag - 1).match {
//stay flipped
previousButton = nil
} else {
waitForFlip = true
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1), execute: {
self.backFlip(sender: sender)
if let button = previousButton {
self.backFlip(sender: button)
self.previousButton = nil
}
self.waitForFlip = false
})
}

}

备注:
  • 玩家有可能在前一张牌翻转之前开始翻转另一张牌。我介绍了waitForFlip在我们等待不匹配的卡片翻转时忽略按钮输入的属性,以避免出现 previousButton 的问题被设置然后覆盖到 nil由上一个 unflip。
  • 没有必要检查是否 Bool值为 == true .只需检查 if boolValue {而不是 if boolValue == true .我删除了两个实例。
  • 您可能希望禁用已翻转卡片的按钮(设置 sender.isEnabled = false )以防止玩家选择翻转卡片。请记住通过设置它们的 isEnabled 在它们被翻转回来时再次重新启用它们。属性到 true .
  • 关于swift - 如何通过发送者以外的标签调用特定的 UIButton?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60020705/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com