【发布时间】:2014-06-06 23:36:06
【问题描述】:
我有一个 iOS 应用程序,它将一组图像和一个持续时间加载到一个数组中,然后我有一个显示图像的计时器,如下所示:
- (void)fireTimer:(NSTimer *)theTimer
{
self.image = [frames objectAtIndex:currentFrame];
NSTimeInterval time = [[durations objectAtIndex:currentFrame] floatValue];
self.timer = [NSTimer scheduledTimerWithTimeInterval:time target:self selector:@selector(fireTimer:) userInfo:nil repeats:NO];
currentFrame++;
if (currentFrame >= [frames count])
{
currentFrame = 0;
[timer invalidate];
}
}
要启动动画,我调用 fireTimer 并循环显示图像,然后在处理完所有图像后调用 [timer invalidate] 来停止动画。我不能使用 startAnimation,因为我需要为每张图片设置不同的持续时间。
知道我没有在后台线程上执行此操作,因此动画不稳定,因为在图像动画时正在进行其他处理。
在背景中制作动画的最佳方式是什么?我可以简单地将这个对 fireTimer 的调用放在一个块中吗?
我知道这可能不是在 iOS 上为图像制作动画的最佳方式,但我现在不想对代码进行大量重构。
感谢您提供任何建议或示例以获得更好的解决方案!!!
【问题讨论】:
-
完全取消计时器。这是一种非常粗糙的动画机制,几乎不应该使用。相反,从查看 UIImageView 及其动画 API 开始。
-
大卫,感谢您的建议。我找到了其他制作动画的方法,但它们需要比我们现在想要做的更多的代码更改。我完全同意你的观点,它很粗糙,但在写它的时候已经足够了。
-
计时器是唯一的方法,因为您声明每个帧需要显示不同的时间。您必须注意避免分配整个 UIImage 对象数组,因为这会在消耗完所有系统内存后使您的设备崩溃。
标签: ios objective-c animation nstimer