5

だから私はスクロールしようとしているメニューをレンダリングしているOpenGL(glView)ビューを持っています。UIScrollViewの再発明を避けようとしていたので、glViewの上にscrollviewを配置しました。

問題は、scrollviewをスクロールするとレンダリングが一時停止することです

同様の問題がここで説明されましたiPhoneでUIScrollViewをドラッグすると、OpenGLESビューのアニメーションがフリーズします

問題は、[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]が何であるかわからないことです。を指します

私は新しいCADisplayLinkを作成し、運が悪かったので上記を実行しようとしました

scrollViewDidScrollでrenderメソッドを呼び出してみました

[self.viewsetNeedsDisplay]を呼び出してみました。

また、timerLoopを呼び出すことへの言及を見つけましたか?

誰か助けてくれませんか

4

2 に答える 2

3

だから、私は解決策を見つけました:)

CADisplayLink *_displayLink を作成します。プロパティ (QuartzCore をインポートする必要があります)

スクロールビューを一番上に置きます。

    #pragma mark - scrollView Delegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    //code for moving the object here    
}

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    [self startDisplayLinkIfNeeded];
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    if (!decelerate) {
        [self stopDisplayLink];
    }
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    [self stopDisplayLink];
}

#pragma mark Display Link

- (void)startDisplayLinkIfNeeded
{
    if (!_displayLink) {
        // do not change the method it calls as its part of the GLKView
        _displayLink = [CADisplayLink displayLinkWithTarget:self.view selector:@selector(display)];
        [_displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:UITrackingRunLoopMode];
    }
}

- (void)stopDisplayLink
{
    [_displayLink invalidate];
    _displayLink = nil;
}
于 2012-06-14T14:10:00.227 に答える
2

Apple WWDC 2012のセッション 223 を参照してください。21:21 から、UIScrollView と OpenGL ビューの統合について話しています。興味深い部分は25:53から始まります。

メインのソース コードは Burf2000 によって作成されましたが、このビデオでは、なぜそれが機能するのか、UIScrollView が実際にどのように機能するのか、そして OpenGL とどのように相互作用するのかについて説明しています。また、コードのデバッグにも役立ちました。

于 2015-10-17T05:04:49.150 に答える