Gezinti kontrol yığın, subviews veya kalıcı denetleyicileri kullanmadan görünümü değiştirmek denetleyicileri animasyon?
NavigationControllers yönetmek için ViewController yığınları var ve sınırlı animasyon geçişleri.
Ekleme bir görünüm denetleyicisi olarak bir alt görüntülemek için varolan bir görünümü denetleyicisi gerektirir geçen olayları için alt görünüm denetleyicisi olan bir ağrı yönetmek için, yüklü küçük sıkıntılar ve genel his kötü bir hack ne zaman uygulama (Apple da önerir karşı yapıyor).
Zararlı kalıcı bir görünüm denetleyicisi yine yerler bir görünüm denetleyicisi üstünde başka da yok bu olay geçen sorunları yukarıda açıklanan etmez 'takas' görünümü denetleyicisi, yığınları.
Şeritleri iOS 5 ve neredeyse ideal sınırlıdır, ancak tüm projelerde kullanılabilir.
Biri bir yolda KATI bir KOD ÖRNEĞİ yukarıdaki sınırlama olmaksızın görünümü denetleyicileri değiştirmek için mevcut ve bunların arasında animasyonlu geçişler için izin verir miyim?
Yakın bir örnek, ama hayır animasyon: How to use multiple iOS custom view controllers without a navigation controller
Edit: Nav Denetleyicisi kullanmak iyidir, ama hareketli olması gerekir geçiş tarzı (sadece slayt etkileri) denetleyicisi vizyonda tamamen değiştirilmesi gerekiyor görünümü (üst üste). Eğer ikinci görünüm denetleyicisi yığından başka bir görünüm denetleyicisi kaldırmak gerekiyorsa, o zaman kapsüllü yeterli değil.
Edit 2: iOS 4 Bu soru için temel OS, şeritleri (yukarıda) denince bunu tek başınayken olmalıdır.
CEVAP
EDİT: herhangi bir yönde çalışan Yeni cevap. Orijinal cevabı sadece arayüzü dikey yönde olduğunda çalışır. Bu farklı bir görünümü ile ilk görünüm penceresi eklendi (*örneğin 4*) altında en az düzeyde gerçekleşmesi gerekir b/c manzarası w/ değiştir bu geçiş animasyonlarını görüntüleyin.
TransitionController
aradım basit bir kapsayıcı sınıfı uygulanan ettik. https://gist.github.com/1394947 de bulabilirsiniz.
Bir kenara olarak, c daha kolay yeniden kullanım için ayrı bir sınıf b/uygulanmasını tercih ederim. Eğer bunu istemezsin eğer değil, sadece aynı mantık doğrudan app temsilci TransitionController
sınıf için ihtiyacı ortadan kaldırarak, uygulamak olabilir. Senin ihtiyacın olan mantık aynı ancak olurdu.
Aşağıdaki gibi kullanabilirsiniz
App temsilci
// 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;
}
Yeni bir görünüm için geçiş için herhangi bir görünüm denetleyicisi denetleyicisi
- (IBAction)flipToView
{
anotherViewController *vc = [[AnotherViewController alloc] init...];
MyAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate.transitionController transitionToViewController:vc withOptions:UIViewAnimationOptionTransitionFlipFromRight];
}
EDİT: Orijinal Cevap aşağıda - sadece dikey yönlendirme için çalışıyor
Bu örnek için aşağıdaki varsayımlar yaptım:
Görünümü denetleyicisi pencerenizin
rootViewController
olarak atadınızYeni bir görünüm geçtiğinizde geçerli viewController yerine viewController yeni bir görünüme sahip olmak istiyorum. Herhangi bir zamanda, yalnızca geçerli viewController canlı (çiğnenmiş örneğin ayırma).
Kodu kolayca farklı çalışmak için değiştirilebilir, anahtar nokta, animasyonlu geçiş ve tek görünümü denetleyicisi. Görünümü denetleyicisi her yerde window.rootViewController
atama dışında tutmak yok emin olun.
Kod uygulaması temsilci geçiş animasyon
- (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;
}];
}
Örnek görünüm denetleyicisi kullanın
- (IBAction)flipToNextView
{
AnotherViewController *anotherVC = [[AnotherVC alloc] init...];
MyAppDelegate *appDelegate = (MyAppDelegate *)[UIApplication sharedApplication].delegate;
[appDelegate transitionToViewController:anotherVC
withTransition:UIViewAnimationOptionTransitionFlipFromRight];
}
Şeffaf Kalıcı Gezinti kontrol Görünümü...
Nasıl iki görünümü denetleyicileri ara...
:-Zararlı uyarı ayrılmış görünüm denet...
Nasıl iOS 7 veya 6 gezinti çubuğu reng...
Nasıl Denetleyicileri için bir temel s...