5

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

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

4

2 回答 2

6

在IOS故事板中,如果你不想使用导航,那么你不能使用push segue。然后,您可以使用模态转场或自定义转场。在模态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:

在没有 UINavigation 控制器的情况下创建 Push Segue 动画

于 2013-05-12T10:02:41.697 回答
2

你为什么不想要它们?这似乎是在为自己工作。

您可以拥有一个没有可见 UI 的导航控制器,它只负责推送和弹出其他 UIViewControllers,然后默认推送 segue 类型将正常工作。

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

于 2012-09-05T10:04:25.350 回答