NStimer设备速度慢?

时间:2010-01-21 12:30:47

标签: iphone

我已经完成了以下翻译背景screen.view.m文件。但帧速率非常慢.i改变了不同值的时间间隔,但是在Iphone设备中图像转换速度非常慢?任何解决方案?请?

 - (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
    // Initialization code
    x =0;

    xx = 0;
    yy = 0;
    secX = 0;

    [NSTimer scheduledTimerWithTimeInterval:(0.1/60) target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
}
return self;

}

 -(void) onTimer
 {  
xx++;
xx = ( xx % 320);

[self setNeedsDisplay];

}



 - (void)drawRect:(CGRect)rect {
// Drawing code


[[UIImage imageNamed:@"graphic.png"] drawAtPoint:CGPointMake(yy,xx )];

if(xx >= 0)
{

    [[UIImage imageNamed:@"graphic.png"]  drawAtPoint:CGPointMake((-320 - (-1 * xx)),yy)];


}

2 个答案:

答案 0 :(得分:2)

您似乎每次都在drawRect方法中绘制图像。我想如果你使用UIImageView来保存UIImage并且移动它可能会更快?

在你的.h文件中

@property (nonatomic, retain) UIImageView *myImageView;

在你的init方法中

self.myImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"graphic.png"]] autorelease];

并且在你的计时器回调中就像移动UIImageView那样

- (void) onTimer {
    xx++;
    xx = ( xx % 320);

    self.myImageView.center = CGPointMake(xx, self.myImageView.center.y);
}

(不再需要drawRect)

希望有所帮助,

萨姆

答案 1 :(得分:1)

NSTimer工作正常。您的问题是绘制图像是一个相对处理器密集型的任务,您每秒执行600次。你只是淹没了iPhone上相对较慢的处理器。

您需要遵循先前的建议并使用imageview或将图像移动到视图中自己的CALayer。这样,您只需绘制一次图像,然后就可以在其他图层中绘制任何其他图像。

或者,您可以创建UIImageView,然后将其他视图设置为子视图。然后,您可以翻译imageview并绘制到子视图中。

我想不出有什么理由为什么一次又一次地画画600 /秒是最好的方法。