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

时间:2011-04-08 22:13:01

标签: iphone objective-c cocoa-touch ios uiview

在横向中,从一个视图(导航控制器堆栈的一部分)转换为另一个视图作为模态视图,并将UIModalTransitionStyleFlipHorizo​​ntal设置为modalTransitionStyle时,视图将以横向模式垂直翻转。

在动画之后,关于视图外观的其他所有内容都很好,尽管我确实注意到视图的帧大小没有改变,这也导致我的代码的其他地方出现问题。我想如果我修复了使这个特定的翻转垂直而不是水平的任何东西,它将解决另一个问题。

我认为它与窗口本身有关而不是改变方向,但我不确定是不是。

有人有什么想法吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

如果您使用iOS7自定义视图控制器转换,则可以使用此解决方案。启动转换的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:方法中。

那就是它。