Разрешить взаимодействие с пользователем во время перехода push / pop UINavigationController - PullRequest
0 голосов
/ 17 декабря 2018

Поскольку у нас нет контроля над вызовом анимации, когда происходит push / pop (даже путем подкласса UINavigationController), мы не можем использовать опцию .allowUserInteraction для UIView.animate методов.

Но послеГлядя на приватные заголовки , я вижу, что Apple задумал этот вариант использования (начиная с iOS 8), предоставив как частный API, так и закрытый флаг (allowUserInteractionDuringTransition).Таким образом, должен быть способ, позволяющий навигационному контроллеру разрешать взаимодействие с пользователем.

Как же ??

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Почему вы хотите использовать для этого закрытый API?

Вы можете реализовать интерактивные push и pop-переходы через общедоступный UIViewControllerTransitioningDelegate API.Это очень просто и предоставляет большую часть функциональности взаимодействия бесплатно, если вы используете UIView.animate* методы.UIPercentDrivenInteractiveTransition абстрагирует большинство трудностей, и вы даже можете использовать UIDynamicAnimator для создания крутых эффектов, подобных жидкости.

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

Вот несколько примеров:

https://theswiftdev.com/2018/04/26/ios-custom-transition-tutorial-in-swift/

https://www.raywenderlich.com/322-custom-uiviewcontroller-transitions-getting-started

https://github.com/marcosgriselli/EasyTransitions

И мой личный фаворит:

https://github.com/lkzhao/ElasticTransition

Если есть что-то более конкретное, что вы хотели быдобиться того, что не охватывается общедоступными API, возможно, вы могли бы предоставить нам некоторый код?

0 голосов
/ 21 декабря 2018

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

let selector = Selector("allowUserInteractionDuringTransition")
self.navigationController?.perform(selector, with: true);

Если указанное выше не работает, попробуйте изменить имя селектора на setAllowUserInteractionDuringTransition.

Надеюсь, этот работает для вас.

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