这样做的原因是在表格视图或地图视图中滚动期间,runloopUITrackingRunLoopMode
的优先级高于默认模式。这可以防止某些事件触发以保证高滚动性能。
要解决您的问题,您必须设置自己的渲染循环,而不是依赖GLKViewController
.
- 第一组
enableSetNeedsDisplay
to GLKView
(NO
应该在使用 GLKViewController 时自动设置)。
- 设置为 0(或可能为 1)以禁用或根本不使用 GLKViewController
preferredFramesPerSecond
的渲染循环GLKViewController
- 导入 QuartzCore 框架:
#import <QuartzCore/QuartzCore.h>
- 创建一个
CADisplayLink
并将其安排在NSRunLoopCommonModes
:
CADisplayLink* displayLink = [CADisplayLink displayLinkWithTarget:self 选择器:@selector(render:)];
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
- 可选:将 displayLink 的 frameInterval 设置为 2(= 帧速率的一半)
- 渲染方法:
- (void)render:(CADisplayLink*)displayLink {
GLKView* 视图 = (GLKView*)self.view;
[查看显示];
}
我还没有测试过,所以告诉我它是否有效!