2012-06-13 4 views
4

Итак, у меня есть представление OpenGL (glView), которое отображает меню, которое я намереваюсь прокручивать. Я пытался избежать повторного использования UIScrollView, и поэтому у меня есть прокрутка над glView.IOS: UIScrollView и OpenGL

Вопрос заключается в том, что прокрутка Scrollview паузы рендеринга

Аналогичный вопрос обсуждался здесь Animation in OpenGL ES view freezes when UIScrollView is dragged on iPhone

Проблема не у меня не знаю, что [DisplayLink addToRunLoop: [NSRunLoop currentRunLoop] forMode: NSRunLoopCommonModes]; ссылается на

Я сделал новый CADisplayLink и попытался сделать выше, не повезло

Я попытался вызова метода визуализации в scrollViewDidScroll

Я пытался дозвониться [self.view setNeedsDisplay];

Я также нашел ссылку на вызов timerLoop?

Может кто-нибудь помочь мне, пожалуйста

+0

Не знаю, но меня очень интересует ответ, поскольку я готовлю что-то подобное. Интересно, может ли это сделать ногами UIScollViews drawRect (косвенно через setNeedsDisplay) из основного потока. До сих пор я делал все материалы UI строго в основной теме. – Patrick

ответ

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; 
} 
1

Обратитесь к session 223 of Apple WWDC 2012. Начиная с 21:21 они говорят об интеграции UIScrollView с представлением OpenGL. Интересная часть начинается в 25:53.

Основной исходный код был написан Burf2000, но это видео объясняет, почему он работает, как работает UIScrollView и как он может взаимодействовать с OpenGL. Это также помогло мне отладить мой код.

Смежные вопросы