EDIT: Herhangi bir yönde çalışan yeni cevap.
Orijinal cevap yalnızca arayüz dikey yönde olduğunda çalışır. Bu, görünümü farklı bir görünüm olmadan değiştiren b / c görünüm geçiş animasyonları, pencereye eklenen ilk görünümün (ör.window.rootViewController.view.anotherView
)En azından bir düzey altındaki görünümlerle gerçekleşmelidir.
Aradığım basit bir konteyner sınıfı uyguladım TransitionController
. Bunu https://gist.github.com/1394947 adresinde bulabilirsiniz .
Bir yana, ayrı bir sınıf b / c uygulamayı yeniden kullanmak daha kolay tercih ediyorum. Bunu istemiyorsanız, aynı mantığı doğrudan uygulama temsilcinize uygulayarak TransitionController
sınıf gereksinimini ortadan kaldırabilirsiniz . Ancak ihtiyacınız olan mantık aynı olacaktır.
Aşağıdaki gibi kullanın:
Uygulama temsilcinizde
// 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;
}
Herhangi bir görünüm denetleyicisinden yeni bir görünüm denetleyicisine geçmek için
- (IBAction)flipToView
{
anotherViewController *vc = [[AnotherViewController alloc] init...];
MyAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate.transitionController transitionToViewController:vc withOptions:UIViewAnimationOptionTransitionFlipFromRight];
}
EDIT: Aşağıdaki orijinal cevap - yalnızca portait yönlendirme için çalışır
Bu örnek için aşağıdaki varsayımları yaptım:
rootViewController
Pencerenizin işareti olarak atanmış bir görünüm denetleyiciniz var
Yeni bir görünüme geçtiğinizde, geçerli viewController'ı yeni görünüme sahip olan viewController ile değiştirmek istiyorsunuz. Herhangi bir zamanda, yalnızca geçerli viewController canlıdır (örn. Ayrılmış).
Kod farklı şekilde çalışmak için kolayca değiştirilebilir, kilit nokta animasyonlu geçiş ve tek görünüm denetleyicisidir. Bir görünüm denetleyicisini atama dışında hiçbir yerde tutmadığınızdan emin olun window.rootViewController
.
Uygulama temsilcisindeki geçişi canlandırmak için kod
- (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;
}];
}
Bir görünüm denetleyicisinde örnek kullanım
- (IBAction)flipToNextView
{
AnotherViewController *anotherVC = [[AnotherVC alloc] init...];
MyAppDelegate *appDelegate = (MyAppDelegate *)[UIApplication sharedApplication].delegate;
[appDelegate transitionToViewController:anotherVC
withTransition:UIViewAnimationOptionTransitionFlipFromRight];
}