如何在iOS中的单独ViewController中创建弹出/对话框视图?

Fel*_*ira 5 user-interface uiviewcontroller uipopovercontroller ios uistoryboardsegue

我正在制作iOS游戏,我希望实现这种效果: 暂停弹出2个不同的控制器

我知道如何使用一个视图控制器,但我的视图控制器类已经膨胀了代码和该屏幕的故事板是一团糟(我实际上有更多的视图,上面的图像,我只是为了清晰的原因隐藏它们).

所以我的问题是:有没有办法通过使用单独的视图控制器来管理这个暂停弹出窗口来实现这一目的?我需要一个不会忽略之前呈现的屏幕的segue.我想用故事板来做那件事.我试过"popover"segue,但它出现了一个我不想要的怪异边框.

此外,我需要所有不由暂停视图控制器管理的控件停止侦听事件.我想到使用覆盖整个屏幕的黑色透明视图作为暂停视图的BG,并使其忽略事件.有更好的方法吗?

提前致谢.

Lom*_*baX 16

如果你想用故事板来实现它,那就很简单了.

我附上示例代码

1 - 在Storyboard中创建自定义PauseViewController.使用全屏视图,黑色,Alpha 0和包含暂停控件的子视图.创建相应的.h和.m文件

2 - 添加并链接您的控件(UIButtons).添加这样的dismiss方法.此方法将从层次结构中删除视图,并使其在可忽略时更改alpha时不可见.

- (IBAction)dismiss:(id)sender {
    [UIView animateWithDuration:0.3f animations:^{
        self.view.alpha = 0.0f;
    } completion:^(BOOL finished) {
        [self.view removeFromSuperview];
        [self removeFromParentViewController];
    }];
}
Run Code Online (Sandbox Code Playgroud)

3 - 子类UIStoryboardSegue创建自己的segue类.然后,用这样的方法覆盖perform方法.这只需要两个控制器(源和目标),并使用动画将目标视图放在源视图上.

-(void)perform{
    UIViewController *dst = [self destinationViewController];
    UIViewController *src = [self sourceViewController];

    // add the view to the hierarchy and bring to front
    [src addChildViewController:dst];
    [src.view addSubview:dst.view];
    [src.view bringSubviewToFront:dst.view];

    // set the view frame
    CGRect frame;
    frame.size.height = src.view.frame.size.height;
    frame.size.width = src.view.frame.size.width;
    frame.origin.x = src.view.bounds.origin.x;
    frame.origin.y = src.view.bounds.origin.y;
    dst.view.frame = frame;

    [UIView animateWithDuration:0.3f animations:^{ 
        dst.view.alpha = 0.5f;
    }];
}
Run Code Online (Sandbox Code Playgroud)

4 - 链接您的segue,选择自定义并插入自定义segue类名称.

TA-daaaa!

如果您需要其他详细信息,请查看示例代码或添加注释.