0

我写了一个自定义的 UIStoryboardSegue。

我的 CustomSegue.m 文件中的唯一代码是:

-(void) perform {
    UIViewController* sourceViewController = (UIViewController *) self.sourceViewController;
    UIViewController* destinationViewController = (UIViewController *) self.destinationViewController;

    UIWindow* window = UIApplication.sharedApplication.keyWindow;
    window.rootViewController = destinationViewController;
    window.rootViewController = sourceViewController;    

    [UIView transitionWithView: sourceViewController.view.window
                        duration: 0.5
                         options: UIViewAnimationOptionTransitionFlipFromLeft
                      animations: ^{window.rootViewController = destinationViewController;}
                      completion: ^(BOOL finished) {}
     ];
}

如果我设置了一个故事板,所以它只有两个 UIViewController,第一个上的按钮链接到第二个,所有工作都按计划进行:从左过渡有一个翻转。

但是:如果我在第一个 UIViewController 之前放置一个 UINavigationController,则 segue 现在会调出第二个视图控制器,而无需从左侧翻转。

到底是怎么回事?为什么过渡不适用于导航控制器?

谢谢你的帮助!

(如果您有兴趣,我使用自定义 segue 的原因是这样我可以在一些介绍页面之后出现一个主从视图。我受到这个 Stackoverflow 答案的启发。)

4

1 回答 1

1

我从来没有解决这个问题,但找到了一个简单的解决方法。我从前面移除了导航控制器,但在 segue 之后放置了一个。然后我在源屏幕的顶部放置了一个简单的导航栏。segue 还触发了向目标视图控制器添加后退按钮。因此,我的自定义转场变成了“伪推送”转场。

于 2013-02-27T04:51:10.400 回答