ios - 如何识别我点击了哪个 UIImageview?

标签 ios iphone swift uiimageview uitapgesturerecognizer

我想实现一种可通过触摸编辑的矩阵。 一系列黑色或白色单元格,如果点击,它们就会从黑色变为白色,反之亦然。 为此,我将使用排列在堆栈 View 中的 UIImageView 和点击手势识别器。但我如何知道哪个 UIImageView 被点击了呢?我可以通过什么方式更改 UIImageView 中的 UIImage?

最佳答案

如果它们只是白色和黑色,那么使用 UIView 并将其 backgroundColor 设置为 .white.black。您可以使用 UIViewtag 属性来识别它们。

在您的gestureRecognizer处理程序中,recognizer.view告诉您触发手势的view

您可以在Interface Builder 中分配标签。例如,如果您有一个 8x8 的正方形数组,则可以使用 2 位数字,其中第一位数字是行,第二位数字是列。因此,您的标签将为 1112、...、8788

func squareTapped(recognizer: UIGestureRecognizer) {
    if let view = recognizer.view {
        let tag = view.tag
        let row = tag / 10
        let col = tag % 10
        print("The view at row \(row), column \(col) was tapped")

        if view.backgroundColor == .black {
            view.backgroundColor = .white
        } else {
            view.backgroundColor = .black
        }
    }
}
<小时/>

如果您确实想使用图像,请将图像加载为 viewController 的属性,并根据图像的行和列分配它们。这里我使用了一个Outlet Collection来保存所有的UIImageView。在Interface Builder中,您可以将每个单元格连接到squares属性。

class BoardViewController: UIViewController {
    let blackImage = UIImage(named: "blackImage")!
    let whiteImage = UIImage(named: "whiteImage")!
    @IBOutlet var squares: [UIImageView]!
    var recognizersAdded = false

    func setUpBoard() {
        for imageview in squares {
            if !recognizersAdded {
                let recognizer = UITapGestureRecognizer(target: self, action: #selector(squareTapped))
                imageview.addGestureRecognizer(recognizer)
                imageview.isUserInteractionEnabled = true
            }

            let tag = view.tag
            let row = tag / 10
            let col = tag % 10

            // Just for demo purposes, set up a checkerboard pattern
            if (row + col) % 2 == 0 {
                imageview.image = blackImage
            } else {
                imageview.image = whiteImage
            }
        }
        recognizersAdded = true
    }

    func squareTapped(recognizer: UIGestureRecognizer) {
        if let view = recognizer.view as? UIImageView {
            let tag = view.tag
            let row = tag / 10
            let col = tag % 10
            print("The view at row \(row), column \(col) was tapped")

            if view.image == blackImage {
                view.image = whiteImage
            } else {
                view.image = blackImage
            } 
        }
    }
}

关于ios - 如何识别我点击了哪个 UIImageview?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50933010/

相关文章:

ios - Xamarin iOS 调试器未命中断点

ios - 如何从 SwiftUI 的详细信息 View (编辑项目 View )中删除核心数据条目?

html - Swift Regex 从页面 html 中检索 token

iphone - 何时捕获 UILabel 的高度?

ios - 在应用程序 bundle 中运送包含数千个音频文件的zip

ios - 我应该如何正确管理JSON提供的图像

iphone - 暂停/启动 AVAudioPlayer 没有毛刺爆裂声

iphone - 更改 UISearchBar/键盘搜索按钮标题

iphone - 添加 CAGradientLayer 子层时,UITableViewCell 不会拾取 UITableViewCellSelectionStyleBlue

ios - swift : Error when the same button is reused. 错误是 "<UIButton: ; frame = ; opaque = NO; autoresize = RM+BM; layer"