Рисование один раз за кадр в какао - PullRequest
1 голос
/ 27 июня 2009

Когда я использую GLUT, я могу предоставить функцию обратного вызова, которая вызывается один раз за кадр для генерации или анимации содержимого кадра.

Как мне сделать то же самое с какао?

Я понимаю, что есть setNeedsDisplay, но я не знаю, как не вызывать его более одного раза за кадр. Что мне нужно, это событие или другой обратный вызов, который говорит мне, когда рисовать другой кадр.

1 Ответ

3 голосов
/ 27 июня 2009

Все в Какао буферизировано, так что вы можете перемещать, анимировать и корректировать виды, не перерисовывая их. Если вам нужно перерисовывать представление снова и снова (например, многократно вызывать drawRect: и создавать свою собственную анимацию), вам нужно создать таймер, который срабатывает каждую 1/20 секунды и запускает обновление представления.

Вы можете создать таймер следующим образом:

[NSTimer scheduledTimerWithTimeInterval:1.0/20.0 target:self selector:@selector(animate) userInfo:nil repeats:YES];

Ваша функция обратного вызова (в данном случае "animate") будет выглядеть следующим образом. Если ваша анимация требует бизнес-логики, вы должны поместить ее здесь. Все рисование должно быть сделано в функции drawRect представления.

- (void)animate {
    [animatedView setNeedsDisplay: YES];
} 

Безопасно вызывать setNeedsDisplay более одного раза за кадр. SetNeedsDisplay устанавливает флаг в представлении и фактически не выполняет никакого рисования. Когда ваш код выполнен и приложение возвращается в основной цикл выполнения, все представления с setNeedsDisplay = YES будут перерисованы.

Надеюсь, это поможет!

...