改变背部和改变UIImages

时间:2013-06-21 16:05:50

标签: ios objective-c uiimage

您好我正在尝试在方法调用中更改图像,如果调用该方法,原始图像会回来

-(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”,但再次调用则不会。

我哪里错了?

2 个答案:

答案 0 :(得分:2)

正如Michael Dautermann指出的那样,你比较两个UIImages的方式是错误的。难道你不能简单地保留一个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";
     }
 }

答案 1 :(得分:0)

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

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

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