我有一个GLKViewController来处理一些OpenGL绘图。我既实现了glkView:drawInRect
和update
方法,又将preferredFramesPerSecond
属性设置为30(默认值)。
问题在于,当用户与应用程序的其他部分进行交互时,委托(delegate)方法将停止触发。我看到的两种情况是用户滚动UITableView或与MKMapView交互时。
有没有一种方法可以确保这些委托(delegate)始终触发,而不管应用程序其余部分在做什么。我唯一希望这些停止的时间是当应用程序进入后台时(这是自动完成的)。
最佳答案
原因是在表 View 或 map View 中滚动时,运行循环位于UITrackingRunLoopMode
中,它的优先级高于默认模式。这可以防止触发某些事件以确保高滚动性能。
为了解决您的问题,您必须设置自己的渲染循环,而不要依赖GLKViewController
。
enableSetNeedsDisplay
的GLKView
设置为NO
(使用GLKViewController时应自动设置)。 preferredFramesPerSecond
设置为0(或可能为1)以禁用GLKViewController
的呈现循环,或者完全不使用GLKViewController #import <QuartzCore/QuartzCore.h>
CADisplayLink
并将其安排在NSRunLoopCommonModes
中:CADisplayLink * displayLink = [CADisplayLink displayLinkWithTarget:自我选择器:@selector(render :)];
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
-(void)render:(CADisplayLink *)displayLink {
GLKView * View =(GLKView *)self.view;
[ View 显示];
}
我尚未对此进行测试,所以请告诉我它是否有效!
关于iphone - GLKViewControllerDelegate被阻止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10080932/