当我使用GLUT时,我可以提供一个回调函数,每帧调用一次以生成帧内容或为其设置动画。
如何使用Cocoa做同样的事情?
我知道有setNeedsDisplay,但我不知道如何避免每帧调用多次。我需要的是一个事件或其他回调,告诉我何时绘制另一帧。
答案 0 :(得分:3)
Cocoa中的所有内容都是缓冲的,因此您可以移动,动画和调整视图,而无需重新绘制视图。如果你需要反复重绘一个视图(例如,重复调用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的所有视图。
希望有所帮助!