繁体   English   中英

更改UIImageView的动画图像

[英]Change the animation images of a UIImageView

在我的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;

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]];
    }

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

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

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

至此,您已经有了对存储在此变量中的旧UIImageView的引用。 您正在丢失对其的引用,并且很可能会泄漏其内存。 您还希望从视图层次结构中删除旧的UIImageView并添加新的UIImageView。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM