我正在做一些测试,以尝试提出向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上具有多个动画,所以我也想知道这是否是在视图上添加多个动画的最佳方法,以及用此方法管理内存的正确方法。
非常感谢
建议在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。 在这段时间里,您可以展示一些吸引人们注意延迟的东西。