这很棘手,我没有找到一个好的方法,我相信有更好的方法,但对我来说性能不是一个大问题,所以我接受了。我没有完整的解决方案,也没有按照您要求的方式解决问题(即通过线程渲染),但至少可能值得一看。如果我能想出一个更好的解决方案,我会更新它,但现在这就是我所拥有的。
我这样做的方式是,我实际上在“顶部”有一个透明的 ViewController glkViewController
,并且我想在 GLKViewController 顶部与之交互的任何东西(例如表格视图、按钮和几乎所有 UI 的东西)都被添加到其中.
我这样做的方式是我的视图控制器有一个单例对象,OverlayViewController
我发现它很有用,因为我想从任何地方轻松访问它,不知道这是否适合您的设计,但这对我来说很有意义。这是在GLKViewController::viewWillAppear
选择器中添加的。
这真的是所有的魔法。所以我有一个覆盖视图,它可以托管任何 IOKit 类型的对象。我像这样添加它(更容易viewWillAppear:
从我的GLKViewController
子类中粘贴我的)
- (void) viewWillAppear: (BOOL) animated {
[[[OverlayViewController shared] view] setUserInteractionEnabled:NO];
[self.parentViewController.view addSubview: [[OverlayViewController shared] view]];
...
}
这基本上意味着您将看到两个视图控制器,但它们彼此“独立”。
然而,这种方法存在明显的问题,例如跟踪哪个视图当前将接受用户交互的繁琐工作,因为它们彼此重叠,因此无法处理。
话虽如此,我正在研究是否可以调度一个专用于在 GLKit 中渲染的线程。