UIModalTransitionStyleFlipHorizo​​ntal在横向上垂直翻转

在横向模式下,从一个视图(这是导航控制器堆栈的一部分)转换到另一个模式视图,将UIModalTransitionStyleFlipHorizo​​ntal设置为modalTransitionStyle,视图在横向模式下垂直翻转。

在animation之后,关于视图外观的其他一切都很好,但我注意到视图的框架大小没有改变,这也导致了我的代码的其他地方的问题。 我想如果我解决了这个特殊的垂直翻转而不是水平的问题,它会解决另一个问题。

我认为这与窗户本身没有改变方向有关,但我不确定是否是这样。

有人有主意吗?

在WWDC与苹果工程师交谈,发现UIModalTransitionStyleFlipHorizo​​ntal在横向上不起作用,它会翻转垂直方向的东西。

我提到的另一个问题是因为我没有正确地调整框架的视图。

如果您使用iOS7自定义视图控制器转换,则有一个解决scheme。 启动转换的ViewController应该向协议确认以下方法。

- (id <UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController: (UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source { return (id<UIViewControllerAnimatedTransitioning>)self; } - (id <UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed { return (id<UIViewControllerAnimatedTransitioning>)self; } - (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext { return 0.7f; } - (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext { UIView *containerView = [transitionContext containerView]; UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; [containerView addSubview:fromVC.view]; UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; [containerView addSubview:toVC.view]; UIViewAnimationOptions animationOption; if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) { animationOption = ([toVC.presentedViewController isEqual:fromVC])?UIViewAnimationOptionTransitionFlipFromTop:UIViewAnimationOptionTransitionFlipFromBottom; } else { animationOption = ([toVC.presentedViewController isEqual:fromVC])?UIViewAnimationOptionTransitionFlipFromLeft:UIViewAnimationOptionTransitionFlipFromRight; } [UIView transitionFromView:fromVC.view toView:toVC.view duration:[self transitionDuration:transitionContext] options:animationOption completion:^(BOOL finished) { [transitionContext completeTransition:YES]; }]; } 

要显示的模式ViewController的转换委托应该像这样设置:[modalViewController setTransitioningDelegate:self]; 例如,这个linke可以放在prepareForSegue:方法中。

而已。