【问题标题】:UIModalTransitionStyleFlipHorizontal flips Vertically in LandscapeUI Modal Transition Style Flip 水平翻转 横向垂直翻转
【发布时间】:2011-04-08 22:13:00
【问题描述】:

当处于横向时,从一个视图(导航控制器堆栈的一部分)过渡到另一个作为模态视图,将 UIModalTransitionStyleFlipHorizo​​ntal 设置为 modalTransitionStyle,视图在横向模式下垂直翻转。

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

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

有人有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    在 WWDC 与 Apple 工程师交谈后发现 UIModalTransitionStyleFlipHorizo​​ntal 在横向模式下不起作用,它会翻转垂直模式下的样子。

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

    【讨论】:

    • 在 WWDC 上提到了 Apple 工程师。我有这个确切的问题,你让我相信我应该切换到不同的过渡。谢谢!
    【解决方案2】:

    如果您使用 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]; 例如这个链接可以放在 prepareForSegue: 方法中。

    就是这样。

    【讨论】:

    • 我在 iOS8 中尝试过,但是当它出现时它没有动画但是当我关闭它时它会动画。
    猜你喜欢
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 2016-07-29
    • 1970-01-01
    • 2016-07-17
    • 2015-12-28
    相关资源
    最近更新 更多