Реализация пользовательских переходов с помощью пользовательских контроллеров контейнеров

Я пытаюсь создать собственный контроллер контейнера в приложении для 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 как капля в замене.

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