編集:任意の方向で機能する新しい答え。
元の答えは、インターフェースが縦向きの場合にのみ機能します。これは、別のビューのビューを置き換えるb / cビュー遷移アニメーションであり、少なくともウィンドウに追加された最初のビューよりも下のレベルのビューで発生する必要があります(例:)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];
}