Gesture Recognizer (такой как `UIPanGestureRecognizer) является объектом , а не свойством.
Вероятно, очевидно, что этот код:
// create a NEW instance of UIImageView each time throught the loop
let imgView = UIImageView()
var x: CGFloat = 50
[UIColor.red, UIColor.green, UIColor.blue].forEach {
// add imgView to self.view
view.addSubview(imgView)
// set imgView's properties
imgView.backgroundColor = $0
imgView.frame = CGRect(x: x, y: 100, width: 50, height: 50)
x += 100
}
будет не приводит к 3 просмотрам изображения. Это даст вам один вид изображения с синим фоном с рамкой (250.0, 100.0, 50.0, 50.0)
. Это потому, что вы создали только один вид изображения и изменяете только его свойства каждый раз с помощью l oop.
Чтобы получить три вида изображений (красный, зеленый и синий фон), разнесенных на 50 пунктов, вам нужно будет сделать следующее:
var x: CGFloat = 50
[UIColor.red, UIColor.green, UIColor.blue].forEach {
// create a NEW instance of UIImageView each time throught the loop
let imgView = UIImageView()
// add it to self.view
view.addSubview(imgView)
// set its properties
imgView.backgroundColor = $0
imgView.frame = CGRect(x: x, y: 100, width: 50, height: 50)
x += 100
}
Вот почему вы должны использовать тот же подход с распознавателями жестов. Вам нужен новый один для каждого объекта, к которому вы будете sh добавлять его.
В зависимости от того, что вы будете делать, вы можете немного упростить вещи:
[image1, image2].forEach {
$0.isUserInteractionEnabled = true
view.addSubview($0)
$0.translatesAutoresizingMaskIntoConstraints = false
// create a NEW instance of UIPanGestureRecognizer
let pg = UIPanGestureRecognizer(target: self, action: #selector(ViewController.moveMethod))
// add it to $0 (an image view)
$0.addGestureRecognizer(pg)
}