РЕДАКТИРОВАТЬ: новый ответ, который работает в любой ориентации. Исходный ответ работает, только когда интерфейс находится в портретной ориентации. Это анимация перехода между представлениями, которые заменяют представление с другим представлением, которое должно происходить с представлениями, по крайней мере, на уровень ниже первого представления, добавленного в окно (например, window.rootViewController.view.anotherView
).
Я реализовал простой контейнерный класс, который назвал TransitionController
. Вы можете найти его на странице https://gist.github.com/1394947.
Кроме того, я предпочитаю реализацию в отдельном классе b / c, который проще использовать повторно. Если вы этого не хотите, вы можете просто реализовать ту же логику непосредственно в делегате приложения, исключив необходимость в классе TransitionController
. Однако логика, которая вам понадобится, будет такой же.
Используйте его следующим образом:
В вашем приложении делегат
// add a property for the TransitionController
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
MyViewController *vc = [[MyViewContoller alloc] init...];
self.transitionController = [[TransitionController alloc] initWithViewController:vc];
self.window.rootViewController = self.transitionController;
[self.window makeKeyAndVisible];
return YES;
}
Для перехода к новому контроллеру представления с любого контроллера представления
- (IBAction)flipToView
{
anotherViewController *vc = [[AnotherViewController alloc] init...];
MyAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate.transitionController transitionToViewController:vc withOptions:UIViewAnimationOptionTransitionFlipFromRight];
}
РЕДАКТИРОВАТЬ: исходный ответ ниже - работает только для ориентации портрета
Для этого примера я сделал следующие предположения:
У вас есть контроллер представления, назначенный как rootViewController
вашего окна
Когда вы переключаетесь на новое представление, вы хотите заменить текущий viewController на viewController, владеющий новым представлением. В любой момент активен только текущий viewController (например, выделен).
Код можно легко изменить, чтобы он работал по-другому, ключевым моментом является анимированный переход и единый контроллер представления. Убедитесь, что вы нигде не сохраняете контроллер представления, кроме назначения его window.rootViewController
.
Код для анимации перехода в делегате приложения
- (void)transitionToViewController:(UIViewController *)viewController
withTransition:(UIViewAnimationOptions)transition
{
[UIView transitionFromView:self.window.rootViewController.view
toView:viewController.view
duration:0.65f
options:transition
completion:^(BOOL finished){
self.window.rootViewController = viewController;
}];
}
Пример использования в контроллере представления
- (IBAction)flipToNextView
{
AnotherViewController *anotherVC = [[AnotherVC alloc] init...];
MyAppDelegate *appDelegate = (MyAppDelegate *)[UIApplication sharedApplication].delegate;
[appDelegate transitionToViewController:anotherVC
withTransition:UIViewAnimationOptionTransitionFlipFromRight];
}
person
XJones
schedule
23.11.2011