我有这个大问题,我不知道如何解决。我有一个UIView,我想绘制滚动背景。我使用NSTimer每秒更新30帧,但它似乎每8秒重绘一帧。我正在调用[self setNeedsDisplay]但它没有效果。我无法弄清楚为什么会发生这种情况,有没有人有任何提示?
感谢您的时间。
我的applicationDidFinishLaunching方法中有一个NSTimer
timer = [NSTimer scheduledTimerWithTimeInterval:0.0
target:self
selector:@selector(gameLoop:)
userInfo:nil
repeats:YES];
它传达了这种方法:
-(void) gameLoop: (id) sender
{
[myView updateAll];
[myView setNeedsDisplay];
}
myView是一个UIView。 UpdateAll更新我的绘图代码。它工作正常,问题似乎是drawRect方法正在执行,所以很少。我需要知道如何让它每秒执行30帧。我一直看到有人说你所要做的就是我上面所做的一切,但setNeedsDisplay仍然只能每8秒调用一次。
感谢您的帮助......
答案 0 :(得分:1)
重新绘制视图是一项昂贵的操作,会大大降低性能。如果您可以使用[UIView beginAnimation...
或使用CAAnimation
,只需将背景作为图片视图在后台移动。
答案 1 :(得分:0)
请勿使用NSTimer。
由于典型的运行循环管理各种输入源,因此定时器的时间间隔的有效分辨率限制在50-100毫秒的数量级。
我不是iPhone上的专家,但您可能需要在平台上查看动画以达到您想要的更新间隔。
答案 2 :(得分:0)
事实证明,我的代码效率非常低,导致速度慢而不是计时器。如果您遇到类似的问题,请确保在假设没有执行之前,使用一些简单的绘图(例如将每秒帧数绘制到屏幕上)来测试drawRect。感谢您的观看。