Swift программно запускает UILongPressGesture - PullRequest
0 голосов
/ 26 апреля 2019

Я хотел бы программно запустить UILongPressGesture, когда пользователь касается кнопки. Это было задано несколько лет назад на Как я могу программно отправить UILongPressGesture? , но мне интересно, есть ли более чистое или более современное решение.

Мой существующий UILongPressGestureRecognizer код (который отображает фактические взаимодействия пользователя с функциональностью) работает следующим образом:

view.addGestureRecognizer(UILongPressGestureRecognizer(target: self, action: #selector(longPress)))

, где longPress определяется как:

@objc func longPress(sender: UILongPressGestureRecognizer) {
    switch sender.state {
    case .began:
        // Display a 'hover' animation for a specific UIView
        ....
    case .changed:
        // Move existing hover animation
        ...
    default:
        // Complete the hover animation
        ...
    }
}

Желаемая функциональность

Я использую это длинное нажатие, чтобы отобразить эффект зависания для любого, выбранного пользователем UIView. Я также хочу предоставить кнопку для автоматического запуска длительного нажатия (в обход longPress, где sender.state == .began). Мое проецируемое решение - это программное создание длинного нажатия .began, создание объекта жеста, который пользователи могут перетаскивать по экрану (возможно, даже перевод UILongPressGestureRecognizer в UIPanGestureRecognizer, если это возможно), а затем продолжение логики анимации при наведении новый жест.

1 Ответ

0 голосов
/ 27 апреля 2019

Я нашел гораздо более чистое решение проблемы - замена нужной кнопки на UIView, содержащая ее UILongPressGestureRecognizer. Я установил для minimumPressDuration этого жеста значение 0, чтобы оно соответствовало событию touchDown кнопки. Этот новый жест использует ту же функцию longPress из исходного вопроса, не требуя никакого дополнительного кода для запуска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...