2016-04-12 20 views
0

View Controller yönünü tespit etmek için nasıl, ben, böyle yapmakben de sadece İkinci View Controller rotasyonu sağlamak için subclassed gelmiş navigasyon kontrolörü üzerinde itilir ki üç görünüm denetleyiciniz

- (BOOL)shouldAutorotate 
{  
    if ([self.topViewController isKindOfClass:[SecondViewController class]]) 
     return YES; 

    return NO; 
} 

Bu kod parçasını Özel Gezinme Denetleyicisine yazdım, Sorun şu ki, uygulamamı portre modunda açıyor ve sonra yönünü yatay moda getiriyorsam Görünüm Denetleyicim dönmüyor, ancak İkinci Görünüm Denetleyicim açıldığında bile rotasyonunu desteklediğinden, manzara modunda açılmasını beklese de portre modunda açılır.

Bunu nasıl başarabilirim?

+0

için supportedInterfaceOrientations uygulamak gerekir? – Daniel

+0

'func supportedInterfaceOrientations() -> UIInterfaceOrientationMask' uygulamasını uyguladınız mı? – Daniel

+0

İkinci Görünüm Denetleyicinin açılmasından sonra ben iyice döner ve ben –

cevap

0

Gezinme sırasında attemptRotationToDeviceOrientation kullanmanız gerekir. Küçük bir UI gecikme (dispatch_async)

@implementation CustomNavigationController 

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    [super pushViewController:viewController animated:animated]; 

    [self updateOrientaion]; 
} 

- (nullable UIViewController *)popViewControllerAnimated:(BOOL)animated 
{ 
    [self updateOrientaion]; 

    return [super popViewControllerAnimated:animated]; 
} 


- (UIInterfaceOrientationMask)supportedInterfaceOrientations 
{ 
    if ([self.topViewController isKindOfClass:[SecondViewController class]]) 
     return UIInterfaceOrientationMaskAll; 

    return UIInterfaceOrientationMaskPortrait; 
} 


- (void)updateOrientaion 
{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [UIViewController attemptRotationToDeviceOrientation]; 
    }); 
} 

@end 

Ama UINavigationControllersupportedInterfaceOrientations ait rootViewController için pop zaman rootViewController çağrılır ile attemptRotationToDeviceOrientation aramaya itme/pop yöntemlerini geçersiz kılar. Bu yüzden de geri portre edecek şekilde hareket ettirin ve ne zaman döndürmek yok FirstViewController

@implementation FirstViewController 

....... 

- (UIInterfaceOrientationMask)supportedInterfaceOrientations 
{  
    return UIInterfaceOrientationMaskPortrait; 
} 

@end 
+0

Çok teşekkürler bu işe yaradı! İkinci görüntü denetleyicim yüklendiğinde hafif bir animasyon olsa da, animasyonu nasıl durdurabilirim, çünkü kullanıcıya döndürme hissi verir. –