お久しぶりです。
開発スタッフのasoです。
はやくも更新の途絶えてきたスタッフブログですが
sadayukiさんお願いします。
さて、今回は開発メモです。
iPhoneでOpenGL ESを使うために、XCodeの
サンプルプロジェクトを変更して使っていたのですが、
特定の状況ではOpenGL画面が更新されないという現象に遭遇しました。
開発スタッフのasoです。
はやくも更新の途絶えてきたスタッフブログですが
sadayukiさんお願いします。
さて、今回は開発メモです。
iPhoneでOpenGL ESを使うために、XCodeの
サンプルプロジェクトを変更して使っていたのですが、
特定の状況ではOpenGL画面が更新されないという現象に遭遇しました。
具体的には、OpenGLの描画対象であるViewの前景に
テーブルなどがある場合、そのスクロール中はOpenGL画面の
更新が止まってしまいます。
これについて調べたところ、別のViewのスクロール中はタイマーの
更新が止まってしまうことが原因とのことでした。
サンプルプロジェクトを下記のよう変更したところ、
なんとかスクロール中も描画されるようになりました。
プログラム読みにくい…あとで直します。
テーブルなどがある場合、そのスクロール中はOpenGL画面の
更新が止まってしまいます。
これについて調べたところ、別のViewのスクロール中はタイマーの
更新が止まってしまうことが原因とのことでした。
サンプルプロジェクトを下記のよう変更したところ、
なんとかスクロール中も描画されるようになりました。
//OpenGLViewController.m - (void)startAnimation { if (!animating) { //CADisplayLinkではなくNSTimerを使います。 //CADisplayLinkを使うとTableViewが妙な挙動になってしまいました。 //CADisplayLink *aDisplayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(drawFrame)]; //[aDisplayLink setFrameInterval:animationFrameInterval]; //[aDisplayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; //self.displayLink = aDisplayLink; animationTimer = [NSTimer scheduledTimerWithTimeInterval:animationFrameInterval target:self selector:@selector(drawView:) userInfo:nil repeats:TRUE]; //この行をいれると他のViewをスクロール中でもアニメーションが止まりません [[NSRunLoop currentRunLoop] addTimer:animationTimer forMode:NSRunLoopCommonModes]; animating = TRUE; } }
プログラム読みにくい…あとで直します。