UIPanGestureRecognizer для всплывающего UIViewController - PullRequest
0 голосов
/ 15 июня 2019

Мне интересно, возможно ли на самом деле использовать UIPanGestureRecognizer на нажатой UIViewController для достижения аналогичного поведения, как в представлении чата Telegram Messenger (и многих других популярных приложений), где вы можете просто проведите пальцем вправо от любого места на экране, чтобы вернуться в меню (или любой другой View Controller, который изначально выдвинул тот, на который мы смотрим).
Я попробовал этот код:

    @objc func swipeLeft(_ sender: UIPanGestureRecognizer) {
    let point = sender.translation(in: view)
    containerView.center = CGPoint(x: point.x > 0 ? view.center.x + point.x : view.center.x, y: view.center.y)
    if sender.state != .ended { return }

    if containerView.center.x < view.frame.width / 2 {
        dismissSelf()
    }
    else {
        UIView.animate(withDuration: 0.2) {
            self.containerView.center = self.view.center
        }
    }
}

и UIPanGestureRecognizer, которые хорошо работают, если вы present редактировали свой ViewController, но не когда он был нажат. По крайней мере, не так, как сейчас.

Прямо сейчас вы видите черный вид, и это также то, что вы видите в «иерархии отладочных представлений» в нижней части толкаемого UIViewController.

Любая помощь приветствуется!

Ответы [ 2 ]

1 голос
/ 15 июня 2019

Я думаю, что то, что вы ищете, уже встроено в interactivePopGestureRecognizer

self.navigationController?.interactivePopGestureRecognizer?.isEnabled = true

, если вы хотите создать какую-то собственную или другую анимацию, тогда я думаю, что вам нужно проверить переходы.Вот хорошая статья для создания пользовательских переходов: https://medium.com/swift2go/simple-custom-uinavigationcontroller-transitions-fdb56a217dd8

0 голосов
/ 18 июня 2019

Нет необходимости обрабатывать панорамирование. Вы можете просто встроить свой вид в контроллер навигации, и он обеспечит такое поведение (проведите пальцем, чтобы вернуться назад).

Тогда вы также можете скрыть панель навигации, если не хотите ее видеть.

Пользователь также может удалить самый верхний контроллер вида, используя заднюю кнопку на панели навигации или с помощью жеста смахивания по левому краю.

https://developer.apple.com/documentation/uikit/uinavigationcontroller

// Hide the Navigation Bar
self.navigationController?.setNavigationBarHidden(true, animated: animated)

// Show the Navigation Bar
self.navigationController?.setNavigationBarHidden(false, animated: animated)
...