2014-02-09 55 views
0

我有横向专用的应用程序。导航效果很好:当我推新视图时,它会从左向右滑动并加载显示。当它被卸载时,从右向左滑动。 但是,当我旋转设备时,事情会改变,推动现在从右向左。 面对的iOS 7中的错误不处理旧样式而不回避怪懒出现的滑动意见推,我用这个代码风景旋转后推动方向改变

- (void)pushViewControllerRetro:(UIViewController *)viewController { 
    CATransition *transition = [CATransition animation]; 
    transition.duration = 0.3; 
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    transition.type = kCATransitionPush; 
    transition.subtype = kCATransitionFromBottom; 
    [self.view.layer addAnimation:transition forKey:nil]; 

    [self pushViewController:viewController animated:NO]; 
} 

- (void)popViewControllerRetro { 
    CATransition *transition = [CATransition animation]; 
    transition.duration = 0.3; 
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    transition.type = kCATransitionPush; 
    transition.subtype = kCATransitionFromTop; 
    [self.view.layer addAnimation:transition forKey:nil]; 

    [self popViewControllerAnimated:NO]; 
} 

为什么?

+0

你的意思是,如果你旋转180度? –

+0

是的,我的意思是 – giuseppe

回答

0

当您将设备旋转180度时,您将从landscapeLeft到landscapeRight ... left变为正确,反之亦然。使用deviceRotation来定义你的德,崔根源过渡

例如第一种情况

transition.type = [UIDevice currentDevice]. orientation == UIDeviceRotationLandscapeLeft ? kCATransitionFromRight : kCATransitionFromLeft; 
+0

好的,对不起,我错误的代码。看我的编辑。你的解决方案(你的意思是UIDeviceOrientationLandscapeLeft,没有)禁用推动动画... – giuseppe

+0

你取消了转换并在每次旋转后创建... –

0

这是正确的解决方案

- (void)pushViewControllerRetro:(UIViewController *)viewController { 
    CATransition *transition = [CATransition animation]; 
    transition.duration = 0.3; 
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    transition.type = kCATransitionPush; 


    transition.subtype = [UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeRight ?kCATransitionFromBottom : kCATransitionFromTop; 
    [self.view.layer addAnimation:transition forKey:nil]; 

    [self pushViewController:viewController animated:NO]; 

} 

- (void)popViewControllerRetro { 
    CATransition *transition = [CATransition animation]; 
    transition.duration = 0.3; 
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    transition.type = kCATransitionPush; 
    transition.subtype = [UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeRight ?kCATransitionFromTop : kCATransitionFromBottom; 

    [self.view.layer addAnimation:transition forKey:nil]; 

    [self popViewControllerAnimated:NO]; 
}