原因在於,在表格視圖或地圖視圖中滾動時,runloop位於UITrackingRunLoopMode
,其優先級高於默認模式。這可以防止一些事件觸發以保證高滾動性能。
要解決您的問題,您必須設置您自己的渲染循環,而不是依靠GLKViewController
。
- 首先設置
GLKView
到NO
的enableSetNeedsDisplay
(使用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];
}
我沒有測試過這一點,所以告訴我,如果它的作品!
你能發表一些代碼嗎? – prince 2012-07-06 21:38:17
沒有任何realavent代碼。在'GLKViewController' init中,我將'preferredFramesPerSecond'設置爲30. – 2012-07-07 21:17:28