С этой проблемой я часто сталкиваюсь, и меня удивляет, что этот важный шаг не является частью учебной документации по NSOpenGLView.
Вам необходимо настроить таймер обратного вызова, чтобы уведомить нужное представление.для перерисовки:
- (void)awakeFromNib
{
NSTimer *updateTimer = [NSTimer timerWithTimeInterval:1.0f/30.0f target:self selector:@selector(idle:) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:updateTimer forMode:NSDefaultRunLoopMode];
}
Обратите внимание, что это происходит в awakeFromNib
.Таймер сработает с интервалом 1/30, который вы можете изменить, если хотите.Каждый раз, когда он запускается, он вызывает функцию с именем idle
.Эта функция может быть реализована следующим образом:
- (void)idle:(NSTimer*)timer
{
[self setNeedsDisplay:YES];
}
Это заставляет представление перерисовывать себя при каждом обновлении, включая вашу графику OpenGL.