在解除NavigationViewController之前,CATransition在方向更改时工作错误

Sar*_*ati 11 iphone objective-c ios

这是我用来呈现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];

}
Run Code Online (Sandbox Code Playgroud)

这是我的代码解雇

-(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];
}
Run Code Online (Sandbox Code Playgroud)

情况1 ---在景观模式下运作良好

情况2 ---在纵向模式下运行良好

情况3 ---以纵向模式呈现并在横向模式下解除不正常工作(在显示正确视图之前的额外动画)

情况4 ---以横向模式呈现并以纵向模式解除不能正常工作(在显示正确视图之前的额外动画)

Tod*_*son 0

UIWindow 层具有奇怪的旋转属性,并且您执行的任何动画都不能保证正确检测方向(并且随着不同的 iOS 版本而变化)。完成您想要的操作的最简单方法是使用自定义演示动画。这是关于如何做到这一点的很好的文章。