presentViewController制作黑屏

时间:2013-06-05 12:46:56

标签: ios objective-c unity3d

我正在寻找解决我问题的方法很长时间,但在我的案例中大多数都没用,因为几乎所有这些都是关于在IB中完成的错误,我在这个项目中没有使用。要点:

我有一个用Unity生成的XCode项目,我想在UnityViewController的顶部添加另一个带有UIWebView的视图控制器。由于Unity生成的项目不使用UINavigationController,我无法使用pushViewController并决定使用presentViewController:...而是。问题是,当我尝试这样做时,我只看到一个黑屏。如果我调用dismissViewController,我再次看到UnityViewController,这样就可以了。问题是,就像presentViewController没有添加我的vc的视图。我使用断点来查看是否正在调用viewDidLoad而不是。同样适用于 - (void)loadView和 - (UIView *)视图。 这是我用来添加我的vc的代码:

WebViewController *webViewController = [[WebViewController alloc] init];
[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentModalViewController:webViewController animated:YES];

我检查了webViewController是否为nil而不是。 rootViewController是UnityViewController,我100%肯定它。

这是Unity生成的代码,用于创建视图层次结构:

_mainDisplay = [[DisplayManager Instance] mainDisplay];
[_mainDisplay->window makeKeyAndVisible];

static bool _ClassInited = false;
if(!_ClassInited)
{
    AddOrientationSupportDefaultImpl([UnityViewController class]);
    _ClassInited = true;
}

_viewController = [[UnityViewController alloc] init];
_viewController.wantsFullScreenLayout = TRUE;
_viewController.view = _mainDisplay->view;

以及后来的另一种方法:

[_mainDisplay->window addSubview: _mainDisplay->view];
_mainDisplay->window.rootViewController = _viewController;
[_mainDisplay->window bringSubviewToFront: _mainDisplay->view];

黑屏可能是由缺少UINavigationController造成的吗?

这可能与我的问题无关,但我也有一个菜单,我需要在我的应用程序中随时可见,并将其作为keyWindow的子视图。

P.S。我还尝试使用webvController设置为rootvc来呈现UINavigation控制器,但我得到的只是一个带导航栏的黑屏。

P.S.S。我在Unity项目中使用Vuforia,因此无法在模拟器中运行它。

编辑:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.view.backgroundColor = [UIColor whiteColor];

    UIImageView *icon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Icon.png"]];
    icon.frame = CGRectMake(50, 50, 200, 200);
    [self.view addSubview:icon];
}

断点位于我更改backgroundColor的行。它没有被调用。

EDIT2: 通过断点,我发现没有调用我的WebViewController子类的方法,甚至不是init。这就像xcode忽略了那个类的存在。我只编辑了viewDidLoad方法,其余的是默认的UIViewController子类模板。 WebViewController.h也没有变化。

EDIT3: 现在修好了。将WebViewController类名更改为其他类名称有所帮助。我能想到的唯一合乎逻辑的解释是WebViewController之前已经在其中一个源文件中实现过,但我自己并没有这样做。可能在其中一个库中(?)。 无论如何,感谢您的帮助,我接受了GuillaumeA的答案,因为感谢他的建议,我发现它实际上并不是观点的问题。

2 个答案:

答案 0 :(得分:8)

使用您提供的信息很难知道问题的来源。

这可能只是一种正常行为。在创建UIViewController的新实例时(我假设您的WebViewController是子类),它会为它创建一个空白根UIView

“空白”是指视图没有子视图,但也没有背景颜色(nil)。这会使视图显示为黑色,并且 - 由于某种原因 - 会阻止视图在显示时生成动画。

要测试我的假设是否正确,请尝试更改WebViewController视图的背景颜色:

WebViewController *webViewController = [[WebViewController alloc] init];
webViewController.view.backgroundColor = [UIColor redColor];
[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentModalViewController:webViewController animated:YES];

注意:{6.0}中现已弃用presentModalViewController:animated:,因此您可能希望将其替换为presentViewController:animated:completion:

[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewController:webViewController animated:YES completion:nil];

答案 1 :(得分:0)

尝试像这样初始化

WebViewController *webViewController=[[WebViewController alloc]initWithNibName:@"WebViewController" bundle:[NSBundle mainBundle]];

注意:假设您的nib文件名称为:WebViewController.xib