我想实现一种可通过触摸编辑的矩阵。 一系列黑色或白色单元格,如果点击,它们就会从黑色变为白色,反之亦然。 为此,我将使用排列在堆栈 View 中的 UIImageView 和点击手势识别器。但我如何知道哪个 UIImageView 被点击了呢?我可以通过什么方式更改 UIImageView 中的 UIImage?
最佳答案
如果它们只是白色和黑色,那么使用 UIView
并将其 backgroundColor
设置为 .white
或 .black
。您可以使用 UIView
的 tag
属性来识别它们。
在您的gestureRecognizer处理程序中,recognizer.view
告诉您触发手势的view
。
您可以在Interface Builder 中分配标签。例如,如果您有一个 8x8 的正方形数组,则可以使用 2 位数字,其中第一位数字是行,第二位数字是列。因此,您的标签将为 11
、12
、...、87
、88
。
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/