Iphone IOS:UIScrollView和OpenGL

Iphone IOS:UIScrollView和OpenGL,iphone,ios,opengl-es,uiscrollview,glkit,Iphone,Ios,Opengl Es,Uiscrollview,Glkit,所以我有一个OpenGL(glView)视图,它正在呈现一个我想要滚动的菜单。我试图避免重新发明UIScrollView,因此我在glView的顶部放置了一个scrollview 问题是滚动scrollview会暂停渲染 这里讨论了一个类似的问题 问题是我不知道[displayLink addToRunLoop:[NSRunLoop currentRunLoop]forMode:NSRunLoopCommonModes]是什么;指 我已经创建了一个新的CADisplayLink,并尝试执行上述操

所以我有一个OpenGL(glView)视图,它正在呈现一个我想要滚动的菜单。我试图避免重新发明UIScrollView,因此我在glView的顶部放置了一个scrollview

问题是滚动scrollview会暂停渲染

这里讨论了一个类似的问题

问题是我不知道[displayLink addToRunLoop:[NSRunLoop currentRunLoop]forMode:NSRunLoopCommonModes]是什么;指

我已经创建了一个新的CADisplayLink,并尝试执行上述操作,但运气不佳

我已尝试在scrollViewDidScroll中调用render方法

我已尝试调用[self.view setNeedsDisplay]

我还发现了一个关于调用timerLoop的


有人能帮我吗

所以,我找到了一个解决办法:)

创建一个CADisplayLink*\u显示链接;属性(您需要导入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;
}
请参阅。从21:21开始,他们讨论了将UIScrollView与OpenGL视图集成。有趣的部分25:53开始


主要源代码由Burf2000编写,但本视频解释了它的工作原理、UIScrollView的实际工作原理以及它如何与OpenGL交互。它还帮助我调试代码。

不知道,但我对答案很感兴趣,因为我正在做类似的东西。我想知道将UIScollViews drawRect(间接通过setNeedsDisplay)踢出主线程是否可以做到这一点。到目前为止,我已经在主线程中严格地完成了所有UI工作。“源代码由Burf2000编写…”源代码由Apple提供作为示例代码。搜索OpenGLScroller以获取完整的工作示例。