Touchesmoved - обновление нескольких элементов одним движением

Я пытаюсь обновить несколько изображений после нажатия и перетаскивания элементов. Я реализовал прикосновения, начал, коснулся и прикоснулся, но я не знаю, как заставить прикосновения влиять на несколько изображений.

Я обыскивал в Интернете, но я не смог найти никаких руководств по этому вопросу. Если бы вы могли указать мне правильное направление или дать мне какой-то базовый совет, это было бы очень признательно.

Ниже приведен пример изображения:

Изменить: ниже приведен пример изображения того, что должно быть возможно:

Как это должно выглядеть.

Я хотел бы иметь возможность воздействовать на другие буквы таким же образом через ту же прессу, меняя их изображения. Эти картинки являются временными.

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    print("touches began:\(touches)")
}

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
            self.image = UIImage(named: "slot")!
        print("touches moved:\(touches)")
    }

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.image = UIImage(named: "tile")!
        print("touches ended")
    }

1 ответ

Решение

Если я вас правильно понял, это должно быть примерно так:

class ChangableView: UIView {
    private var touchedImageView: UIImageView? {
        didSet {
            if oldValue == touchedImageView { return }
            if let oldValue = oldValue {
                oldValue.image = UIImage(named: "tile")!
            }
            if let newValue = touchedImageView {
                newValue.image = UIImage(named: "slot")!
            }  
        }
    }

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        guard let touch = touches.first else { return }
        updateTouchedImageViewWithTouch(touch, event: event)
    }

    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
        guard let touch = touches.first else { return }
        updateTouchedImageViewWithTouch(touch, event: event)
    }

    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
        touchedImageView = nil
    }
}

private extension ChangableView {
    func updateTouchedImageViewWithTouch(touch: UITouch, event: UIEvent?) {
        let touchPoint = touch.locationInView(self)
        let touchedView = self.hitTest(touchPoint, withEvent: event)
        touchedImageView = touchedView as? UIImageView
    }
}

Кроме того, ваш UIViewController должен иметь в качестве представления подкласс ChangableView и не забывать устанавливать свойство userInteractionEnabled для всех UIImageViews в YES.

Другие вопросы по тегам