Iphone动画的最佳实践

时间:2011-05-06 05:59:26

标签: iphone uiimageview

我正在做一些测试,试图想出一个向UIImageView添加小动画的最佳方法。

以下代码正在运行,但是当第一次调用时,我猜测动画正在加载。我应该如何加载动画以避免这种延迟?当第二次被召唤时,它立即开始。这段代码在 - (void)loadView方法和[animation startAnimating]中;从自定义方法调用。 注意:UIImageView *动画实际上是一个实例var。

NSString *imageName;
NSMutableArray *animImages = [[NSMutableArray alloc]init];

for(int i = 0; i <= 40; i++) {
    imageName = [NSString stringWithFormat:@"frame_%d.png", i];
    [animImages addObject:[UIImage imageNamed:imageName]];
}

UIImageView *animation; // is actually an instant var declared in header.

animation = [[UIImageView alloc]initWithFrame:CGRectMake(50, 0, 600, 300)];
animation.animationImages = animImages;
animation.animationDuration = 2;
animation.animationRepeatCount = 1;

我需要在同一个UIView上有几个动画,所以我还想知道这是否是在视图上添加多个动画的最佳方式以及在此方法中管理内存的正确方法。

非常感谢

1 个答案:

答案 0 :(得分:1)

首选加载viewDidLoad中的资源而不加载loadView。你应该在viewDidUnload中将它们删除,如果你的视图再次加载,在viewDidLoad中加载会将它们取回。

有人可能会说你也可以在didReceiveMemoryWarning中删除它们,但是应该使用AFAIK viewDidUnload来释放UI元素。如果您使用didReceiveMemoryWarning,您可以通过仅在调用viewDidUnload时释放来检查是否将再次调用viewDidLoad:

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    if (![self isViewLoaded]) {
        // release resources
    }
}

但是如果动画是实例变量而你真的在做这个

UIImageView *animation = [[UIImageView alloc]initWithFrame:CGRectMake(50, 0, 600, 300)];

您没有设置intance变量,而是设置本地变量。

<强>后来

关于延迟:无论你做什么,装载40张图片都需要时间。如果您不希望UI中的延迟在后台加载它们并在完成后通知UI。在这段时间里,你可以展示一些能够延缓注意力的东西。