Bur*_*000 5 iphone opengl-es uiscrollview ios glkit
所以我有一个 OpenGL(glView) 视图,它正在渲染一个我打算滚动的菜单。我试图避免重新发明 UIScrollView,因此我在 glView 顶部放置了一个滚动视图。
问题是滚动滚动视图会暂停渲染
此处讨论了类似的问题当 UIScrollView 在 iPhone 上拖动时,OpenGL ES 视图中的动画会冻结
问题是我不知道什么 [displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; 指的是
我制作了一个新的 CADisplayLink 并尝试在没有运气的情况下执行上述操作
我试过在 scrollViewDidScroll 中调用渲染方法
我试过调用 [self.view setNeedsDisplay];
我还发现了一个指的是调用timerLoop?
谁能帮我一下
所以,我找到了解决方案:)
创建一个 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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2157 次 |
| 最近记录: |