Хранить изображения в виде массива, назначить их индекс к значению тега, винт touchesBagan и т.д., и просто использовать жест распознаватели.
Добавление изображений становится:
var myImages = [UIImage]()
let squareImg = UIImageView(image:#imageLiteral(resourceName: "square"), tag: [//add a distinguished tag here])
view.addSubview(squareImg)
myImages.append(squareImg)
Теперь, когда ваши взгляды в массиве (они не должны быть UIImageViews или даже UIImages, просто что-то уникальное), просто указывают на правильную вещь в вашем массиве :
@IBAction func handlePan(_ recognizer: UIPanGestureRecognizer) {
let translation = recognizer.translation(in: self.view)
for view in self.subviews as [UIView] {
if let imageView = view as? UIImageView {
let image = myImages.tag
}
}
}
Я знаю, что это не то, о чем вы просите. Но техника есть. Я настрою свой ответ на основе ваших отзывов.
EDIT:.
На основе комментариев, это звучит как хорошая стратегия продвижения вперед является по крайней мере заполнить свойство тега с «связанными парами в каком-то цикле Кроме того, это звучит как какое-то ошибки сборки. Вот мой вопрос по этому вопросу ....
Свойства тега доступны для каждого объекта, будь то вид или элемент управления. Кроме того, они имеют тип Int. В последнем комментарии указаны ссылки ошибок неправильный аргумент в вызове функции, ожидающий изображение. Я думаю, что происходит две разные вещи.
(1) Заполнение свойства тега для «связанных» изображений в цикле.
Если вы загружаете «квадрат» и «круг» n раз, создавайте объекты в цикле с индексом и заполняете их свойство тега.
for index in 0...10 {
// instantiate your images
// associate these images by populating their tag values
imgSquare.tag = index
imgCircle.tag = index
// continue any other set here
}
Типы циклов в Swift являются изначально Int, поэтому это верно.
(2) Неправильная ошибка построения ссылки.
Ошибка сборки на линии
let circleImg = UIImageView(image: circle, tag: [arrayCounter])
Это не «консервы» инициализатор UIImageView, и от ошибок сборки это (пока) не кодированное расширение UIImageView. Похоже, что - это кодированное расширение для UIImageView, которое ожидает два аргумента, image и highlightImage. Если вы хотите продлить UIImageView что-то вроде этого, я бы создать расширение с удобством инициализатором:
extension UIImageView {
convenience init(image: UIImage, tag:Int) {
self.init()
self.image = image
self.tag = tag
}
}
Это скелет. Вы можете добавить инструкцию охраны и сделать ее инициализатором с возможностью запуска. Вы можете добавить фреймы, backgroundColor, что угодно. Дело в том, что у вас в настоящее время нет есть инициализатор, вызывающий 'image: tag:', но вы кодируете его.
Вот как я должен был начать, спасибо. Теперь для тега, с которым я не знаком, как мне это сделать? Поскольку каждый раз, когда я создаю новый и другой цветной квадрат, мне нужно, чтобы каждый тег был другим? Как какая-то счетная переменная? Или это не то, что я собираюсь с этой настройкой. – idlehand
Мне трудно ответить. В чем цель? Это какая-то игра, где растут трудности или трудности? Или что-то перестраивает «квадраты»? Даже между теми, которые вы можете найти, «помечая» все «лучшее», чего я не вижу. Массив «3x6» может быть проще всего сделать как одномерный массив из 18 вместо двухмерного массива 3x6. Лично? Я бы пошел с сохранением UIColors вместо UIImages, а тем более UIImageViews. Теги, которые должны быть целыми числами, были бы такими, как 0 == colors1, 1 == color1 и т. Д. Но детали будут диктовать вещи. – dfd
Я не на 100% понят, что вы делаете (это звучит как-то довольно круто), но из того, что я собираю, если вы хотите «связать» различные взгляды друг с другом, которые могут быть лучшим кандидатом на то, как заполнять их свойство тега. Например, если у вас есть шесть цветов среди квадратов и кругов, и объект должен переместить каждый цветный квадрат в соответствующий круг, каждая «пара» или «ассоциация» будет значением тега. Возможно, вам даже не понадобится массив. – dfd