Реализация пользовательских переходов с помощью пользовательских контроллеров контейнеров
Я пытаюсь создать собственный контроллер контейнера в приложении для iPhone. Мне бы хотелось, чтобы этот контейнер реализовывал пользовательские переходы, как и поведение по умолчанию TabBarControllers и NavigationControllers в iOS 7. Я успешно смог добавить пользовательские анимации в свои переходы, но у меня возникли проблемы с добавлением интерактивной логики.
Как часть процесса перехода, я должен создать TransitionContext. Обычно это создается системой, но так как я использую пользовательский контроллер контейнера, я создал свой собственный класс, который соответствует UIViewControllerContextTransitioningProtocol. Когда распознаватель жестов, связанный с переходом, срабатывает, я пытаюсь начать переход с вызова:
[self.horizontalSwipeInteractionController startInteractiveTransition:transitionContext];
где self.horizontSwipeInteractionController наследуется от UIPercentDriveInteractiveTranstion. К сожалению, в этот момент я получаю следующую ошибку:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[PrivateTransitionContext _animator]: unrecognized selector sent to instance 0x14654a80
Я не понимаю, что делать сейчас. Документация не содержит примеров того, как реализовать пользовательские переходы с помощью пользовательских контроллеров контейнеров.
1 ответ
К несчастью, UIPercentDriveInteractiveTranstion
использует частные API.
Алек Остром пишет об этом в своем блоге iOS Nomad, где он рассказывает о создании интерактивного пользовательского контроллера контейнера (выделение добавлено):
... мы можем видеть, что UIPercentDrivenInteractiveTransition ищет аниматора в нашем контексте, вызывая недокументированный метод. Достаточно удобно, что все контексты перехода, сделанные Apple, реализуют этот метод, и именно так переход, управляемый процентами, может запустить анимацию. К сожалению, это означает, что мы не можем использовать этот класс для наших собственных контроллеров представления контейнеров.
Он рекомендует использовать AWPercentDrivenInteractiveTransition
как капля в замене.