我构建了一个简单的内存游戏,由 16 个 UIImageView 组成。
对于内存游戏,您一次只能触摸一张牌。当您触摸卡片时,它会翻转并显示下面的图像
我的问题是我只希望用户一次能够触摸一个 ImageView 。当用户同时点击两张卡时,游戏就会出现故障。所以我的问题是如何一次只允许 1 个 UIImageView 执行操作,并且不允许多个 UIImageView 在同时触摸时同时执行操作。
最佳答案
假设用户必须通过再次选择卡片来展开卡片,我建议向您的 viewController 添加一个属性来跟踪 selectedCard
。如果已经有一张选定的卡,请忽略所有其他卡。
var selectedCard: UIImageView?
@objc func handleTap(_ recognizer: UITapGestureRecognizer) {
guard let imageView = recognizer.view as? UIImageView else { return }
if let selected = selectedCard {
if selected === imageView {
// unflip the card
imageView.image = backOfCard
selectedCard = nil
}
} else {
// display face of card
imageView.image = ...
selectedCard = imageView
}
}
注意:即使用户同时点击两张卡片,handleTap
也会连续调用两次。第一张牌将获胜并被翻转并成为 selectedCard
,第二张牌将被忽略,因为 if selected === imageView
测试将失败。
关于ios - 如何一次只允许一个UIImageView被触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52466800/