gpt4 book ai didi

iphone - GLK ViewController 委托(delegate)被阻止

转载 作者:行者123 更新时间:2023-12-03 18:35:02 27 4
gpt4 key购买 nike

我有一个 GLKViewController 来处理一些 OpenGL 绘图。我实现了 glkView:drawInRectupdate 方法,并将 preferredFramesPerSecond 属性设置为 30(默认值)。

问题在于,当用户与应用程序的其他部分交互时,委托(delegate)方法会停止触发。我见过这种情况发生的两种情况是当用户滚动 UITableView 或与 MKMapView 交互时。

有没有办法确保这些委托(delegate)始终触发,无论应用程序的其余部分在做什么。我希望这些停止的唯一时间是应用程序进入后台时(这是自动执行的)。

最佳答案

原因是在 TableView 或 map View 中滚动期间,运行循环位于 UITrackingRunLoopMode 中。其优先级高于默认模式。这可以防止某些事件触发,以保证高滚动性能。

要解决您的问题,您必须设置自己的渲染循环,而不是依赖 GLKViewController .

  • 第一套enableSetNeedsDisplay GLKView的至NO (使用 GLKViewController 时应自动设置)。
  • 设置preferredFramesPerSecond为 0(或者可能为 1)以禁用 GLKViewController 的渲染循环或者根本不使用 GLKViewController
  • 导入QuartzCore框架:#import <QuartzCore/QuartzCore.h>
  • 创建 CADisplayLink并将其安排在 NSRunLoopCommonModes :
CADisplayLink* displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(render:)];[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
  • 可选:将displayLink的frameInterval设置为2(=帧速率的一半)
  • 渲染方法:
- (void)render:(CADisplayLink*)displayLink {    GLKView* view = (GLKView*)self.view;    [view display];}

我还没有测试过这个,所以请告诉我它是否有效!

关于iphone - GLK ViewController 委托(delegate)被阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10080932/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com