首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程GLKView绘图

多线程GLKView绘图
EN

Stack Overflow用户
提问于 2012-12-01 05:01:10
回答 2查看 3K关注 0票数 7

我的主视图控制器包含许多子视图。一个这样的子视图是链接到GLKViewControllerGLKViewGLKViewController似乎负责更新GLKView的显示,自动调用主线程上的更新函数。

这个主视图控制器中的另一个视图是UITableView。当用户与表视图交互时,GLKView停止更新。

我承认,我是OGL ES编程的新手,所以我不确定该怎么做。我需要拿到GLKViewController

代码语言:javascript
复制
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect;

方法将在独立于主线程的线程上调用,因此我可以在用户与其他元素交互时保持GLKView的动画效果。

EN

回答 2

Stack Overflow用户

发布于 2013-08-09 23:58:25

GLKViewController正在使用CADisplayLink以与您的显示刷新率匹配的频率调用更新/绘制。当你的tableview/scrollview开始跟踪一个触摸时,run循环开始给它所有的优先级。您可能需要拆分自己的GLKView和CADisplayLink (而不是使用GLKViewController),以便修改CADisplayLink的运行循环模式,以便即使tableview/scrollview正在跟踪触摸,它也会继续运行。有关更多信息,请参阅此discussion

票数 2
EN

Stack Overflow用户

发布于 2013-01-04 17:52:31

这很棘手,我没有找到一个好的方法来做它,我相信有更好的方法,但对我来说性能不是一个大问题,所以我解决了它。我没有一个完整的解决方案,它不是像你要求的那样用解决这个问题(例如,通过线程渲染),但也许至少值得一看。如果我能想出一个更好的解决方案,我会更新它,但目前这是我的全部。

我这样做的方式是,我实际上在glkViewController的“上面”有了一个透明的ViewController,任何我想在GLKViewController上交互的东西(比如tablesViews、按钮和几乎所有的UI东西)都会被添加到上面。

我这样做的方式是,我的视图控制器有一个名为OverlayViewController的单例对象,我发现它很有帮助,因为我想从任何地方轻松地访问它,不知道这是否适合您的设计,但它对我来说很有意义。这将被添加到GLKViewController::viewWillAppear选择器中。

这就是所有的魔力。所以我有一个覆盖视图,它承载着任何IOKit类型的对象。我像这样添加它(只需从我的GLKViewController子类粘贴我的viewWillAppear: )

代码语言:javascript
复制
- (void) viewWillAppear: (BOOL) animated {
    [[[OverlayViewController shared] view] setUserInteractionEnabled:NO];
    [self.parentViewController.view addSubview: [[OverlayViewController shared] view]];
    ...
}

这基本上意味着将有两个视图控制器,你可以看到,但它们是彼此“独立”的。

然而,这种方法有一些明显的问题,比如跟踪哪个视图当前将接受用户交互的繁琐工作,因为它们是在彼此之上的,这是不能处理的。。

所以说到这里,我正在研究是否有可能在GLKit中调度一个专门用于渲染的线程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13653113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档