Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 多线程GLKView绘图_Ios_Multithreading_Glkit - Fatal编程技术网

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]];
    ...
}