UIView绘图问题

时间:2010-04-12 19:19:03

标签: iphone objective-c

我有这个大问题,我不知道如何解决。我有一个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秒调用一次。

感谢您的帮助......

3 个答案:

答案 0 :(得分:1)

重新绘制视图是一项昂贵的操作,会大大降低性能。如果您可以使用[UIView beginAnimation...或使用CAAnimation,只需将背景作为图片视图在后台移动。

答案 1 :(得分:0)

请勿使用NSTimer。

来自NS Timer reference

  

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

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

答案 2 :(得分:0)

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

相关问题