ios - 如何一次只允许一个UIImageView被触摸

标签 ios swift xcode uiimageview uikit

我构建了一个简单的内存游戏,由 16 个 UIImageView 组成。
board with no flipped cards

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

board with one flipped card

我的问题是我只希望用户一次能够触摸一个 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/

相关文章:

iphone - 为什么 Xcode 在 iOS 模拟器和设备上运行我的项目的旧版本?

swift - 带有组合框的 mapkit 自动完成

ios - 无法使用桥接 header 中导入的 Objective C 框架

ios - Alamofire.request 方法中的明显死锁

xcode - 整数溢出在 Swift 中给出 EXC_BAD_INSTRUCTION

ios - 如何获取带有年份的月份名称以及两个日期之间的年份列表

ios - 使用 RestKit 0.20 获取当前可达性状态

ios - 崩溃 : XPC API Misuse: Over-resume of a connection

ios - UINavigationController 阴影

ios - 如何在服务器端为苹果钱包创建 .pkpass 文件并在 iOS 端获取