これは、テーブル ビューまたはマップ ビューでのスクロール中に、ランループがUITrackingRunLoopMode
デフォルト モードよりも優先度が高いためです。これにより、高いスクロール パフォーマンスを保証するために、一部のイベントが発生しなくなります。
問題を解決するには、 に依存するのではなく、独自のレンダリング ループを設定する必要がありますGLKViewController
。
- to
enableSetNeedsDisplay
の最初のセット(GLKViewController を使用する場合は自動的に設定されます)。GLKView
NO
- GLKViewController のレンダリング ループを無効にするか、GLKViewController をまったく使用しない場合は
preferredFramesPerSecond
、0 (または 1) に設定します。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* ビュー = (GLKView*)self.view;
[ビュー表示];
}
私はこれをテストしていないので、動作するかどうか教えてください!