iOS没有导航控制器的Segues

5
我希望使用storyboards来创建我的应用程序。 我可以找到很多关于如何在导航控制器或选项卡控制器中使用它的信息,但是我不想使用它们中的任何一个。
我的目标是创建一个具有不同视图但不使用导航或选项卡控制器的应用程序。我该怎么做?
2个回答

6
在IOS故事板中,如果您不想使用导航,则无法使用push segue。那么,您可以使用modal segue或custom segue。在modal segue中,有四个转换效果:
  1. Cover Vertical
  2. Flip Horizontal
  3. Cross Dissolve
  4. Partial Curl
然而,所有这些预定义的segue动画都不能执行水平滑动动画segue。如果您想使用水平滑动效果,您需要使用custom 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:

创建没有UINavigation Controller的Push Segue动画


我也在互联网上找到了这个解决方案:http://stackoverflow.com/questions/15139909/auto-layout-screen-rotation-and-uiview-animation/20958850#20958850 - catamphetamine

2
为什么你不想要它们?这样看起来只会给自己增加工作量。
你可以拥有一个没有可见UI的导航控制器,它只负责推送和弹出其他UIViewControllers,然后默认的push segue类型就可以正常工作。
然而,如果你真的不想要它们,你可以始终创建一个自定义segue类,并使用它来管理你的视图控制器栈。

1
你如何在Storyboard中隐藏UI?然后你如何通过编程方式推送和弹出ViewControllers? - Crashalot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接