我建立了一个简单的记忆游戏,其中包含16个UIImageViews。
对于记忆游戏,您一次只能触摸一张卡。触摸卡片时,卡片会翻转并显示下面的图像
我的问题是我只希望用户一次能够触摸一个图像视图。当用户同时点击两张卡时,游戏就会出现故障。所以我的问题是,如何一次只允许1个UIImageView来执行一个动作,并且如果不允许同时触摸多个UIImageViews,则该如何不允许一次执行一个动作。
答案 0 :(得分:0)
您有很多选择。
您可以在超级视图上放置一个轻击手势识别器,以保存所有卡片视图,并添加逻辑以找出被点击的视图。由于只有一种方法可以识别水龙头,因此您将获得的水印不会超过一个。
或者,您可以在类中添加一个实例变量来跟踪状态,并使用它在不需要用户点击的图像视图上将dict
设置为false。>
答案 1 :(得分:0)
假设用户必须通过再次选择卡片来翻转卡片,我建议向您的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
测试将失败。