我有一个基于应用程序性能的问题。
首先背景: 我正在开发一款可以在我的MacBook上顺利运行的iPhone应用程序,但在我的iPhone 4开发设备上有点滞后。所以我开始寻找原因并发现它很快。 该应用程序是一个使用由计时器触发的drawRect方法的游戏。
问题: 在这个drawRect中,我使用drawInRect:方法从UIImage中绘制背景。由于我希望背景移动,我有一个比iPhone显示器更宽的图像,我通过定时器触发的小步骤将其绘制到-400像素,然后将其重置为0像素,以获得我的“移动效果”游戏。 这似乎使我的应用程序滞后。当我在iPhone的框架内绘制时,我没有任何问题,所以我很确定这就是问题所在。
这有什么解决方案吗?更好的技术等? 我不想使用几个图像的动画来为背景设置动画。
真诚的你
答案 0 :(得分:0)
如何在屏幕上移动此图像?你是否每隔1/30秒就会触发一次移动,因为如果你不是这样,那么这可能是造成“迟钝”外观的原因。我建议设置一个新的NSRunLoop并将此动作作为其中的一部分,并且每1/30秒运行一次循环触发,这样你就可以获得30 FPS的帧速率,看起来很平滑。
另外,发布您正在使用的代码,也许我们可以发现问题。
答案 1 :(得分:0)
我只是重新回答这个问题,我想到了解决这个问题的方法。不是每1/30秒重绘一次,为什么不只绘制一次并重新定义图像所在的帧。创建一个方法来执行此操作然后设置一个新的nstimer,每隔1调用一个新方法/ 30秒。像这样的东西
-(void) movePicture {
position += 5;
if (position <= 0) {
[moveTimer invalidate];
}
picture.frame = CGRectMake(position,10,10,10);
[self.view setNeedsDisplay];
}
要么你可以使用动画并将其设置为运行所需的任何时间。这将最终以异步方式发生,因此您不必担心它会严重滞后于应用程序。