iPhone动画最佳做法

问题描述 投票:0回答:1

我正在做一些测试,以尝试提出向UIImageView添加小动画的最佳方法。

以下代码可以正常工作,但是当我第一次调用动画时,我会延迟加载动画。 如何加载动画以避免这种延迟? 再次调用时,它将立即启动。 这段代码在-(void)loadView方法和[animation startAnimating]中; 从自定义方法调用。 注意:UIImageView * animation实际上是一个实例变量。

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上具有多个动画,所以我也想知道这是否是在视图上添加多个动画的最佳方法,以及用此方法管理内存的正确方法。

非常感谢

iphone uiimageview
1个回答
1
投票

建议在viewDidLoad中加载资源,而不是loadView中。 您应该将它们丢弃在viewDidUnload中,如果再次加载视图,则在viewDidLoad中加载将使它们恢复原状。

有人可能会争辩说,您也可以在didReceiveMemoryWarning中将它们丢弃,但是应该使用AFAIK viewDidUnload来释放UI元素。 如果使用didReceiveMemoryWarning,则仅在调用viewDidUnload时才释放,可以检查是否再次调用viewDidLoad:

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

但是,如果animation是实例var,而您实际上是在这样做

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

您不是设置intance变量而是本地变量。

后来

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

© www.soinside.com 2019 - 2024. All rights reserved.