【问题标题】:ios segues without navigationcontrollers没有导航控制器的 ios segue
【发布时间】:2012-08-30 00:28:37
【问题描述】:

我想使用故事板来创建我的应用程序。 我可以找到很多关于如何将它与导航或选项卡控制器一起使用的信息,但我不希望它们中的任何一个都使用。

我的目标是创建一个具有不同视图但不使用导航或选项卡控制器的应用程序。 我该怎么做?

【问题讨论】:

    标签: ios xcode segue uistoryboard


    【解决方案1】:

    在IOS故事板中,如果你不想使用导航,那么你不能使用push segue。然后,您可以使用模态转场或自定义转场。在modal segue中,有四种转换:

    1. 垂直封面
    2. 水平翻转
    3. 交叉溶解
    4. 部分卷曲

    但是,所有这些预定义的segue动画都不能执行水平滑动动画segue。如果要使用水平滑动效果,则必须使用自定义segue。您需要像这样覆盖函数:

    - (void) perform
    {
    UIViewController *desViewController = (UIViewController *)self.destinationViewController;
    
    UIView *srcView = [(UIViewController *)self.sourceViewController view];
    UIView *desView = [desViewController view];
    
    desView.transform = srcView.transform;
    desView.bounds = srcView.bounds;
    
    if(isLandscapeOrientation)
    {
        if(isDismiss)
        {
            desView.center = CGPointMake(srcView.center.x, srcView.center.y  - srcView.frame.size.height);
        }
        else
        {
            desView.center = CGPointMake(srcView.center.x, srcView.center.y  + srcView.frame.size.height);
        }
    }
    else
    {
        if(isDismiss)
        {
            desView.center = CGPointMake(srcView.center.x - srcView.frame.size.width, srcView.center.y);
        }
        else
        {
            desView.center = CGPointMake(srcView.center.x + srcView.frame.size.width, srcView.center.y);
        }
    }
    
    
    UIWindow *mainWindow = [[UIApplication sharedApplication].windows objectAtIndex:0];
    [mainWindow addSubview:desView];
    
    // slide newView over oldView, then remove oldView
    [UIView animateWithDuration:0.3
                     animations:^{
                         desView.center = CGPointMake(srcView.center.x, srcView.center.y);
    
                         if(isLandscapeOrientation)
                         {
                             if(isDismiss)
                             {
                                 srcView.center = CGPointMake(srcView.center.x, srcView.center.y + srcView.frame.size.height);
                             }
                             else
                             {
                                 srcView.center = CGPointMake(srcView.center.x, srcView.center.y - srcView.frame.size.height);
                             }
                         }
                         else
                         {
                             if(isDismiss)
                             {
                                 srcView.center = CGPointMake(srcView.center.x + srcView.frame.size.width, srcView.center.y);
                             }
                             else
                             {
                                 srcView.center = CGPointMake(srcView.center.x - srcView.frame.size.width, srcView.center.y);
                             }
                         }
                     }
                     completion:^(BOOL finished){
                         //[desView removeFromSuperview];
                         [self.sourceViewController presentModalViewController:desViewController animated:NO];
                     }];
    }
    

    如果仍有问题,可以查看这篇文章。它还有一个 youtube 视频,向您展示如何实现此自定义 segue:

    Create Push Segue Animation Without UINavigation Controller

    【讨论】:

    【解决方案2】:

    你为什么不想要它们?看来您是在为自己工作。

    你可以有一个没有可见 UI 的导航控制器,它只负责推送和弹出其他 UIViewController,然后默认的推送 segue 类型就可以工作了。

    但是,如果您真的不想要它们,您可以随时创建 custom segue class 并使用它来管理您的视图控制器堆栈。

    【讨论】:

    • 如何在 Storyboard 中隐藏 UI?然后如何以编程方式推送和弹出 ViewController?
    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 2020-03-20
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多