EDIT: Jawaban baru yang berfungsi dalam orientasi apa pun.
Jawaban asli hanya berfungsi ketika antarmuka dalam orientasi potret. Ini adalah animasi transisi tampilan b / c yang menggantikan tampilan dengan tampilan berbeda harus terjadi dengan tampilan setidaknya tingkat di bawah tampilan pertama yang ditambahkan ke jendela (miswindow.rootViewController.view.anotherView
.).
Saya telah mengimplementasikan kelas kontainer sederhana yang saya panggil TransitionController
. Anda dapat menemukannya di https://gist.github.com/1394947 .
Sebagai tambahan, saya lebih suka implementasi di kelas yang terpisah b / c lebih mudah untuk digunakan kembali. Jika Anda tidak menginginkannya, Anda bisa menerapkan logika yang sama secara langsung di delegasi aplikasi Anda untuk menghilangkan kebutuhan TransitionController
kelas. Namun, logika yang Anda butuhkan akan sama.
Gunakan sebagai berikut:
Di delegasi aplikasi Anda
// 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;
}
Untuk beralih ke pengontrol tampilan baru dari pengontrol tampilan apa pun
- (IBAction)flipToView
{
anotherViewController *vc = [[AnotherViewController alloc] init...];
MyAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate.transitionController transitionToViewController:vc withOptions:UIViewAnimationOptionTransitionFlipFromRight];
}
Sunting: Jawaban Asli di bawah - hanya berfungsi untuk orientasi portait
Saya membuat asumsi berikut untuk contoh ini:
Anda memiliki pengontrol tampilan yang ditetapkan sebagai rootViewController
jendela Anda
Saat Anda beralih ke tampilan baru, Anda ingin mengganti viewController saat ini dengan viewController yang memiliki tampilan baru. Kapan saja, hanya viewController saat ini yang hidup (mis.
Kode dapat dengan mudah dimodifikasi untuk bekerja secara berbeda, kuncinya adalah transisi animasi dan pengontrol tampilan tunggal. Pastikan Anda tidak mempertahankan pengontrol tampilan di mana pun di luar penetapan ituwindow.rootViewController
.
Kode untuk menghidupkan transisi dalam delegasi aplikasi
- (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;
}];
}
Contoh digunakan dalam pengontrol tampilan
- (IBAction)flipToNextView
{
AnotherViewController *anotherVC = [[AnotherVC alloc] init...];
MyAppDelegate *appDelegate = (MyAppDelegate *)[UIApplication sharedApplication].delegate;
[appDelegate transitionToViewController:anotherVC
withTransition:UIViewAnimationOptionTransitionFlipFromRight];
}