Ответ 1
Я делаю много настраиваемых анимаций в своих приложениях, которые большинство разработчиков уклоняются от этого, потому что я использую много ограничений UIViewControlloer в моей работе.
Это самый простой способ получить переходы, которые вы ищете.
Вот как бы я это сделал:
-
Создайте контроллер базового представления; позволяет называть его MainViewController. Он будет иметь ссылки на все остальные контроллеры представлений и содержать логику переходов. Он также должен следовать протоколу, который мы будем определять как ViewXControllerDelegate.
-
Создайте свои другие контроллеры представлений; позволяет называть их View1Controller, View2Controller, View3Controller. Добавьте экземпляр каждого из них как частные свойства MainViewController. В методе init MainViewController создайте экземпляры и добавьте их представления в виде представлений MainViewController. Должен выглядеть примерно так:
self.v1c = [[View1Controller alloc]init]; [self addChildViewController:self.v1c]; [self.v1c didMoveToParentViewController:self]; //Setup each subview so that its frame makes it off screen or //On screen depending on the app state and where you want each //subview to animate to/from [self.view addSubview:self.v1c.view]; ....
-
Создайте идентификатор пользователя UIPanGestureRecognizer в каждом из ваших ViewXControllers, у которого его целевая и селекторная установки установлены на родительский контроллер представления (MainViewController).
-
Управляйте всей логикой в классе MainViewController, где вы учитываете пройденное расстояние, состояние приложения, местоположения каждого из представлений (используя вспомогательные свойства в ViewXControllers, такие как "inactiveFrame" или "activeFrame", где анимация между ними происходит на основе процента движения, которое произошло в жесте pan.