2015-07-01 2 views
11

Вот мой код, используемый для представления navigationViewController:CATransition работает неправильно по изменению ориентации, прежде чем увольнения NavigationViewController

-(IBAction)showFilterView:(id)sender { 

    FilterViewController *vc=[self.storyboard instantiateViewControllerWithIdentifier:@"FilterViewController"]; 
    UINavigationController *nvc=[[UINavigationController alloc] initWithRootViewController:vc]; 


    CATransition *transition = [CATransition animation]; 
    transition.duration = 0.35; 
    transition.timingFunction = 
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    transition.type = kCATransitionMoveIn; 
    transition.subtype = kCATransitionFromLeft; 

    UIView *containerView = self.view.window; 
    [containerView.layer addAnimation:transition forKey:nil]; 
    [self.tabBarController presentViewController:nvc animated:NO completion:nil]; 

} 

А вот мой код, чтобы уволить

-(IBAction)back:(id)sender { 


    CATransition *transition = [CATransition animation]; 
    transition.duration = 0.35; 
    transition.timingFunction = 
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    transition.type = kCATransitionMoveIn; 
    transition.subtype = kCATransitionFromRight; 
    UIView *containerView = self.view.window; 
    [containerView.layer addAnimation:transition forKey:nil]; 
    [[self.navigationController presentingViewController] dismissViewControllerAnimated:NO completion:nil]; 
} 

Ситуация 1 --- Working скважина в ландшафтном режиме

Ситуация 2 --- Рабочая скважина в портретном режиме

Ситуация 3 --- Представление в портретном режиме и отключение в ландшафтном режиме не работает должным образом (дополнительная анимация перед отображением правильного вида)

Ситуация 4 --- Представление в ландшафтном режиме и отключение в портретном режиме не работает должным образом (дополнительная анимация перед отображением правильного вида)

+0

Поможет https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/RespondingtoDeviceOrientationChanges/RespondingtoDeviceOrientationChanges.html – aProgrammer

+0

Я проверил ваш код на IPAD-проект, и он отлично работает с одной анимацией, за исключением того, что я испытал с представлением от себя не из tabBarController: '[self presentViewController: nvc animated: NO complete: nil]' – Idali

+0

В UIView * containerView = self.view.window вы назначаете все окно (UIWindow *) в UIView *. Разве вы не должны анимировать слой вида, а не окно? –

ответ

0

Уровень UIWindow имеет странные свойства вращения, и любые выполняемые вами анимации не гарантируют правильное определение ориентации (и варьируются в зависимости от разных версий iOS). Самый простой способ сделать то, что вы пытаетесь сделать, - это создать пользовательскую презентационную анимацию. This is a good writeup как это сделать.

Смежные вопросы