如何识别我拍摄的UIImageview?

时间:2016-12-11 13:11:53

标签: ios iphone swift uiimageview uitapgesturerecognizer

我想通过触摸实现一种可编辑的矩阵。 一系列黑色或白色单元格,如果轻敲开关形成黑色或反之亦然。 为此,我将使用UIImageView排列在堆栈视图中的Tap Gesture Recognizer。但是我怎么知道哪个UIImageView被点击了?在哪种方式我可以改变UIImageView中的UIImage?

4 个答案:

答案 0 :(得分:2)

如果它们只是白色和黑色,那么使用UIView并将其backgroundColor设置为.white.black会更加简单。您可以使用tag的{​​{1}}属性来识别它们。

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

您可以在 Interface Builder 中指定标签。例如,如果您有一个8x8的正方形阵列,则可以使用一个2位数字,其中第一个数字是行,第二个数字是列。因此,您的代码应为view11,...,1287

88

如果您确实想使用图像,请将图像作为viewController的属性加载,并根据图像的行和列进行分配。在这里,我使用 Outlet Collection 来保存所有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 } } } 。在 Interface Builder 中,您将每个单元格连接到UIImageView属性。

squares

答案 1 :(得分:0)

为每个UIImageView分配标签并在其上添加Tap手势。

点按任意视图后,您可以按以下方式点按图片视图:

UIImageView * imageView = gestureRecogniser.view

答案 2 :(得分:0)

我现在使用的代码是这样,它运作良好。 但我想使用平移手势(UIPanGetureRecognizer)来改变UIView的颜色。我该怎么办?

class ViewController: UIViewController {
@IBOutlet weak var PrincipalRowStack: UIStackView!

let rowsNumber=10
let colsNumber=10

override func viewDidLoad() {
    // Do any additional setup after loading the view, typically from a nib.


    super.viewDidLoad()

    var rowsStack = [UIStackView]()
    var images = [[UIView]]()
    var gestRec = [[UITapGestureRecognizer]]()
    for r in 0...rowsNumber-1 {
        rowsStack.append(UIStackView())
        rowsStack[r].axis = .horizontal
        rowsStack[r].distribution = .fillEqually
        images.append([UIView]())
        gestRec.append([UITapGestureRecognizer]())
        for c in 0...colsNumber-1{
            images[r].append(UIView())
            gestRec[r].append(UITapGestureRecognizer())
            gestRec[r][c].addTarget(self, action: #selector(ViewController.Tap(_:)))
            images[r][c].contentMode = .scaleToFill
            images[r][c].layer.borderWidth = 1
            images[r][c].layer.borderColor = UIColor(red:0.5, green:0.5, blue:0.5, alpha: 1.0).cgColor
            images[r][c].addGestureRecognizer(gestRec[r][c])
            rowsStack[r].addArrangedSubview(images[r][c])
        }
    }
    for s in rowsStack{
        PrincipalRowStack.addArrangedSubview(s)
    }

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}



func Tap(_ recognizer: UITapGestureRecognizer) {

    if let view = recognizer.view {
        //let tag = view.tag
        //let row = tag / 10
        //let col = tag % 10
        print("Tapped!")

        if view.backgroundColor == .black {
            view.backgroundColor = .white
        } else {
            view.backgroundColor = .black
        }
    }

}
}

答案 3 :(得分:0)

我解决了将一个PanGestureRecognizer添加到principalStackView,而不是使用这个函数和hitTest知道哪个视图应该改变颜色。

func pan(_ recognizer: UIPanGestureRecognizer){
    if (recognizer.state == .began ||
        recognizer.state == .changed)
    {
        let loc = recognizer.location(in: principalRowStack)
        let view = principalRowStack.hitTest(loc, with: UIEvent())
        view?.backgroundColor = .black


    }

}