我已经完成了以下翻译背景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)];
}
答案 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 /秒是最好的方法。