2010-04-12 105 views
0

我有这个大问题,我不知道如何解决。我有一个UIView,我想绘制一个滚动背景。我使用NSTimer每秒更新30帧,但似乎每8秒重新绘制一帧。我正在调用[self setNeedsDisplay],但它没有效果。我不知道为什么会发生这种情况,有没有人有任何提示?UIView绘图问题

谢谢你的时间。

我有一个NSTimer在我的applicationDidFinishLaunching方法

 
timer = [NSTimer scheduledTimerWithTimeInterval:0.0 
     target:self 
     selector:@selector(gameLoop:) 
     userInfo:nil 
     repeats:YES]; 

IT的消息传递这个方法:

 
-(void) gameLoop: (id) sender 
{ 
    [myView updateAll]; 
    [myView setNeedsDisplay]; 
} 

MyView的是一个UIView。 UpdateAll更新我的绘图代码。它工作正常,问题似乎是drawRect方法很少执行。我需要知道如何让它每秒执行30帧。我不断看到人们说,你所要做的就是我上面所说的,但setNeedsDisplay每8秒钟只能被调用一次。

感谢您的帮助...

+0

发布相关代码。 – 2010-04-12 19:43:31

回答

0

事实证明,我的代码只是非常低效,导致速度慢而不是计时器。如果您遇到类似问题,请确保在假定它未执行之前,使用一些简单的绘图(例如,将“每秒帧数”绘制到屏幕上)测试drawRect。感谢您的观看。

0

请勿使用NSTimer。

NS Timer reference

因为一个典型的运行循环管理的各种输入源,用于定时器的时间间隔的有效分辨率被限制为50-100毫秒的数量级上。

我不是iPhone的专家,但您可能需要在平台上查看动画以实现您想要的更新间隔。

1

重新绘制视图是一个昂贵的操作,这会大大降低性能。如果可以,可以使用[UIView beginAnimation...或使用CAAnimation s将背景作为图像视图在背景中移动。

+0

问题是我必须这样做。它不适用于最终应用程序,它与其他技术的性能比较。 – toc777 2010-04-14 09:30:13

+0

好吧,我认为你的比较完成了,那么,不是吗? “可怕的表现”似乎是一个足够的比较大多数;) – 2010-04-14 17:20:11

+0

我知道我不需要它更新30 fps的性能比较,但我想要得到它的工作无论如何(只为表演),因为这是它是如何正在运行其他技术。 – toc777 2010-04-15 17:14:49