如何一次只允许触摸一个 UIImageView
How to allow only one UIImageView to be touched at a time
我构建了一个简单的记忆游戏,它由 16 个 UIImageView 组成。
对于记忆游戏,您一次只能摸一张牌。当您触摸卡片时,它会翻转并显示下面的图像
我的问题是我只希望用户一次能够触摸一个图像视图。当用户同时点击两张卡片时,游戏就会出现故障。所以我的问题是如何一次只允许 1 个 UIImageView 执行一个操作,而不允许多个 UIImageView 在同时触摸时同时执行一个操作。
您有多种选择。
您可以在包含所有卡片视图的超级视图上放置一个点击手势识别器,并添加逻辑来确定哪个被点击。由于只有一种方法可以识别水龙头,因此您获得的不会超过一种。
或者,您可以向您的 class 添加一个实例变量来跟踪状态,并使用它在您不想要的图像视图上将 userInteractionEnabled
设置为 false用户点击。
假设用户必须通过再次选择卡片来取消翻转,我建议在您的 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
测试将失败。
我构建了一个简单的记忆游戏,它由 16 个 UIImageView 组成。
对于记忆游戏,您一次只能摸一张牌。当您触摸卡片时,它会翻转并显示下面的图像
我的问题是我只希望用户一次能够触摸一个图像视图。当用户同时点击两张卡片时,游戏就会出现故障。所以我的问题是如何一次只允许 1 个 UIImageView 执行一个操作,而不允许多个 UIImageView 在同时触摸时同时执行一个操作。
您有多种选择。
您可以在包含所有卡片视图的超级视图上放置一个点击手势识别器,并添加逻辑来确定哪个被点击。由于只有一种方法可以识别水龙头,因此您获得的不会超过一种。
或者,您可以向您的 class 添加一个实例变量来跟踪状态,并使用它在您不想要的图像视图上将 userInteractionEnabled
设置为 false用户点击。
假设用户必须通过再次选择卡片来取消翻转,我建议在您的 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
测试将失败。