SORU
16 Kasım 2011, ÇARŞAMBA


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
23 Kasım 2011, ÇARŞAMBA


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:

  1. Görünümü denetleyicisi pencerenizin rootViewController olarak atadınız

  2. Yeni 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];
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Matthew Smith

    Matthew Smit

    24 Mayıs 2010
  • MkElite

    MkElite

    13 NİSAN 2012
  • Stanislav Petrov

    Stanislav Pe

    7 ŞUBAT 2009