更改UIImageView的动画图像

时间:2012-07-01 18:57:35

标签: iphone objective-c ios cocoa-touch sdk

在我的iPhone应用程序的viewDidLoad方法中,我有以下代码:

zombie[i].animationImages = zombieImages;
        zombie[i].animationDuration = 0.8/zombieSpeed[i];
        zombie[i].animationRepeatCount = -1; 
        [zombie[i] startAnimating];

稍后在应用程序中调用以下代码:

[zombie[i] stopAnimating];
                zombie[i] = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"zh.png"]];
                zombie[i].animationImages = flyingZombieImages;
                zombie[i].animationDuration = 0.8/zombieSpeed[i];
                zombie[i].animationRepeatCount = -1; 
                [zombie[i] startAnimating];

这会导致应用崩溃,行zombie[i].animationImages = flyingZombieImages;上有EXC_BAD_ACCESS

使用以下代码初始化

flyingZombieImages :( zombieImages以相同方式初始化)

NSMutableArray *flyingZombieImages = [NSMutableArray array];
    for (NSUInteger i=1; i <= 29; i++) {
        NSString *imageName = [NSString stringWithFormat:@"flzom%d.png", i];
        [flyingZombieImages addObject:[UIImage imageNamed:imageName]];
    }

为什么会这样?有解决方法吗?

1 个答案:

答案 0 :(得分:1)

正如Dima所说,flyingZombieImages可能没有正确初始化,这导致了崩溃。但是,当您创建UIImageView的新实例时还存在另一个问题:

zombie[i] = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"zh.png"]];

此时您已经拥有对此变量中存储的旧UIImageView的引用。你正在失去对它的引用,很可能会泄漏它的记忆。您还希望从视图层次结构中删除旧的UIImageView并添加新的UIImageView。

更好的方法是使用原始的UIImageView并通过用以下代码替换此行来更改其图像:

zombie[i].image = [UIImage imageNamed:@"zh.png"];