我想用故事板来创建我的应用程序。 我可以找到很多关于如何将它与导航或制表控制器一起使用的信息,但我不是其中之一。
我的目标是创建一个具有不同视图但不使用导航或tabcontroller的应用。 我该怎么做?
答案 0 :(得分:6)
在IOS故事板中,如果您不想使用导航,那么您就无法使用push segue。然后,您可以使用模态segue或自定义segue。在模态segue中,有四种转换:
然而,所有这些预定义的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:
答案 1 :(得分:2)
你为什么不想要它们?这似乎是你为自己做的工作。
你可以拥有一个没有可见UI的导航控制器,它只负责推送和弹出其他UIViewControllers,然后默认的push segue类型就可以了。
但是,如果您确实不想要它们,您可以随时创建custom segue class并使用它来管理您的视图控制器堆栈。