お久しぶりです。
開発スタッフの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;
}
}
プログラム読みにくい…あとで直します。