如何一次只触摸一个UIImageView

时间:2018-09-23 13:54:48

标签: ios swift xcode uiimageview uikit

我建立了一个简单的记忆游戏,其中包含16个UIImageViews。
board with no flipped cards

对于记忆游戏,您一次只能触摸一张卡。触摸卡片时,卡片会翻转并显示下面的图像

board with one flipped card

我的问题是我只希望用户一次能够触摸一个图像视图。当用户同时点击两张卡时,游戏就会出现故障。所以我的问题是,如何一次只允许1个UIImageView来执行一个动作,并且如果不允许同时触摸多个UIImageViews,则该如何不允许一次执行一个动作。

2 个答案:

答案 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测试将失败。