これは、テーブルビューまたはマップビューでのスクロール中にrunloopがデフォルトモードよりも優先度が高いUITrackingRunLoopMode
にあるためです。これにより、高いスクロール性能を保証するために、いくつかのイベントが発生することを防ぎます。
問題を解決するには、GLKViewController
に頼るのではなく、独自のレンダリングループを設定する必要があります。
- まず(GLKViewControllerを使用するときに自動的に設定されるべきである)
NO
にGLKView
enableSetNeedsDisplay
のセット。
- QuartzCoreフレームワークをインポート
GLKViewController
のレンダリングループを無効にするか、すべての
- でGLKViewControllerを使用していない0(または多分1)に
preferredFramesPerSecond
を設定します。#import <QuartzCore/QuartzCore.h>
- は
CADisplayLink
を作成し、NSRunLoopCommonModes
でそれをスケジュール:
CADisplayLink* displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(render:)];
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
- オプション:2にDisplayLinkのframeIntervalの設定(=ハーフフレームレート)
- 方法レンダリング:私はこれをテストし、それが動作するかどうかを教えていない
- (void)render:(CADisplayLink*)displayLink {
GLKView* view = (GLKView*)self.view;
[view display];
}
は!
コードを投稿できますか? – prince
realaventコードはありません。 'GLKViewController' initでは' preferredFramesPerSecond'を30に設定しました。 –