お久しぶりです。
開発スタッフのasoです。
はやくも更新の途絶えてきたスタッフブログですが
sadayukiさんお願いします。


さて、今回は開発メモです。

iPhoneでOpenGL ESを使うために、XCodeの
サンプルプロジェクトを変更して使っていたのですが、
特定の状況ではOpenGL画面が更新されないという現象に遭遇しました。
具体的には、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;
    }
}

プログラム読みにくい…あとで直します。