0

嗨,我正在尝试在方法调用中更改图像,如果调用该方法,则原始图像会返回

-(void)change
{
if ((player.image = [UIImage imageNamed:@"first.png"]))
{
player.image = [UIImage imageNamed:@"second.png"]));
}
else
{
player.image = [UIImage imageNamed:@"first.png"]));
}
}

这可以将“first.png”图像更改为“second.png”,但再次调用时不会。

我哪里错了?

4

2 回答 2

2

正如 Michael Dautermann 所指出的,您比较两个 UIImage 的方式是错误的。您不能简单地保留一个 NSString 属性来告诉您正在显示的图像吗?

 -(void)change
 {
     if ([self.displayedImageTitle isEqualToString:@"first.png"]){
        player.image = [UIImage imageNamed:@"second.png"]));
        self.displayedImageTitle = @"second.png";
     }
     else{
        player.image = [UIImage imageNamed:@"first.png"]));
        self.displayedImageTitle = @"first.png";
     }
 }
于 2013-06-21T16:20:50.607 回答
0

在上面的代码中,您做出了一个无效的假设,即[UIImage imageNamed: @"first.png"]当您进行比较时,“”将始终是同一个 UIImage 对象。那不是真的。每次调用“ imageNamed” API 时,都可能会创建一个全新的 UIImage 对象。

现在,由于 UIImage 对象对文件名或图像标题一无所知,因此您需要跟踪正在显示的图像,然后打开

我建议创建一个具有文件名或标题属性(您还需要设置)的子类 UIImage 对象,或者将您的两个 UIImages 作为属性或 ivars 加载到内存中(也就是说,如果这些不是巨大的内存占用图像),然后进行切换。

于 2013-06-21T16:08:40.603 回答