Ros*_*mes 8 iphone opengl-es mapkit glkit
我有一个GLKViewController来处理一些OpenGL绘图.我已经实现了glkView:drawInRect和update方法,并将preferredFramesPerSecond属性设置为30(默认值).
问题是当用户与应用程序的其他部分交互时,委托方法停止触发.我见过这种情况的两种情况是当用户滚动UITableView或与MKMapView交互时.
有没有办法确保这些代表总是触发,无论应用程序的其余部分在做什么.我希望这些停止的唯一时间是应用程序进入后台(这是自动进行).
Fel*_*lix 15
原因是在表视图或地图视图中滚动期间,runloop的UITrackingRunLoopMode优先级高于默认模式.这可以防止某些事件触发,以保证高滚动性能.
要解决您的问题,您必须设置自己的渲染循环,而不是依赖于GLKViewController.
enableSetNeedsDisplay的GLKView来NO(应该会自动使用GLKViewController时设置).preferredFramesPerSecond为0(或可能为1)以禁用渲染循环GLKViewController或根本不使用GLKViewController#import <QuartzCore/QuartzCore.h>CADisplayLink并安排在NSRunLoopCommonModes:CADisplayLink* displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(render:)]; [displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
- (void)render:(CADisplayLink*)displayLink {
GLKView* view = (GLKView*)self.view;
[view display];
}
我没有测试过这个,所以请告诉我它是否有效!
| 归档时间: |
|
| 查看次数: |
1685 次 |
| 最近记录: |