Ios 多线程GLKView绘图
我的主视图控制器包含许多子视图。其中一个子视图是链接到Ios 多线程GLKView绘图,ios,multithreading,glkit,Ios,Multithreading,Glkit,我的主视图控制器包含许多子视图。其中一个子视图是链接到GLKViewController的GLKView。GLKViewController似乎是负责更新GLKView的显示的,某种自动的东西正在主线程上调用更新函数 我在此主视图控制器中的另一个视图是UITableView。当用户与表视图交互时,GLKView停止更新 我承认,我对OGL ES编程相当陌生,所以我不知道如何处理这个问题。我需要获取GLKViewController - (void)glkView:(GLKView *)view
GLKViewController
的GLKView
。GLKViewController
似乎是负责更新GLKView
的显示的,某种自动的东西正在主线程上调用更新函数
我在此主视图控制器中的另一个视图是UITableView
。当用户与表视图交互时,GLKView
停止更新
我承认,我对OGL ES编程相当陌生,所以我不知道如何处理这个问题。我需要获取GLKViewController
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect;
方法在独立于主线程的线程上调用,这样我就可以在用户与其他元素交互时保持
GLKView
动画效果。这很棘手,我没有找到一个好的方法,我确信有更好的方法,但对我来说性能不是一个大问题,所以我解决了它我没有一个完整的解决方案,没有按照您要求的方式解决问题(即通过渲染线程),但可能至少值得一看。如果我能想出一个更好的解决方案,我会更新它,但现在这是我所有的
我这样做的方式是,我实际上在glkViewController
的“顶部”有一个透明的ViewController,我想在glkViewController顶部与之交互的任何东西(如表视图、按钮和几乎所有的UI内容)都被添加到该视图中
我这样做的方式是,我的视图控制器有一个名为OverlayViewController
的单例对象,我发现它很有用,因为我想从任何地方轻松访问它,不知道这是否适合您的设计,但对我来说很有意义。这将添加到GLKViewController::viewwillbeen
选择器中
这就是所有的魔力。所以我有一个覆盖视图,它是任何IOKit类型对象的宿主。我这样添加它(更容易粘贴我的视图将出现:
来自我的GLKViewController
子类)
这基本上意味着您将看到两个视图控制器,但它们彼此“独立”
然而,这种方法存在一些明显的问题,例如跟踪哪个视图当前将接受用户交互的繁琐工作,因为它们彼此重叠,这是无法处理的
因此,我正在研究是否可以在GLKit中调度一个专用于渲染的线程。GLKViewController正在使用CADisplayLink以与您的显示刷新率匹配的频率调用更新/绘制。当tableview/scrollview开始跟踪触摸时,run循环开始赋予它所有优先级。为了修改CADisplayLink的运行循环模式,您可能必须拆分自己的GLKView和CADisplayLink(而不是使用GLKViewController),以便即使tableview/scrollview正在跟踪触摸,CADisplayLink也能继续运行。有关更多信息,请参阅此部分:不确定这是如何解决更新问题的。它所做的一切似乎都是管理交互性,而这一部分我一点问题都没有。我的
GLKView
和UITableView
在屏幕上完全分离,我可以让它们独立交互。问题是,当我开始与表视图交互时,drawInRect
停止在我的GLKViewController
上被调用,因此,我的旋转模型停止旋转问题在于苹果的设置方式,我很确定所有的GLES调用都必须来自主线程。。。所以IDK人。。。我以前从来没有试过在桌子上用过:-/如果我以后有时间的话,我会去看看的!他们正在与UITableView进行什么样的交互?这需要很长时间来处理他们的输入吗?@Liron一旦用户开始滚动tableview,GLKView
直到表格停止才会更新scrolling@DanF嗯,我以后再考虑。没有什么会立即浮现在脑海中。你在这方面有过进步吗?
- (void) viewWillAppear: (BOOL) animated {
[[[OverlayViewController shared] view] setUserInteractionEnabled:NO];
[self.parentViewController.view addSubview: [[OverlayViewController shared] view]];
...
}