Если они только белые и черные, было бы намного проще использовать UIView
и установить его backgroundColor
на .white
или .black
. Вы можете использовать свойство tag
для UIView
s, чтобы идентифицировать их.
В вашем обработчике gestureRecognizer recognizer.view
сообщает вам view
, который вызвал жест.
Вы можете назначить теги в Interface Builder . Например, если у вас есть квадрат квадратов 8x8, вы можете использовать двузначное число, где первая цифра - это строка, а вторая цифра - столбец. Таким образом, ваши теги будут 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
s. В 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
}
}
}
}