【问题标题】:Change Back And Forth UIImages来回更改 UIImages
【发布时间】:2013-06-21 16:05:49
【问题描述】:

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

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

我哪里错了?

【问题讨论】:

  • 没有分号 (;)?所有的')是什么?该代码无法编译。
  • 我在代码中的输入错误
  • 如果您需要有关无效代码的帮助,请发布实际代码。细节很重要。
  • = 是赋值运算符。您需要== 才能实现平等。但请记住,您应该很少将== 与对象指针一起使用。您发布的代码在使用 == 的所有情况下都无法正常工作。

标签: ios objective-c uiimage


【解决方案1】:

正如 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";
     }
 }

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 注意使用= 而不是==。您的答案是有效的,但代码甚至没有进行适当的比较。
    猜你喜欢
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多