您好我正在尝试在方法调用中更改图像,如果调用该方法,原始图像会回来
-(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”,但再次调用则不会。
我哪里错了?
答案 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加载到内存中(也就是说,如果这些不是巨大的内存占用图像),然后进行切换。