应用程序变为活动状态后,图像比较无效

时间:2013-12-07 11:44:49

标签: ios iphone image ios6

我使用以下按钮来比较按钮的背景图像。

if([[button currentBackgroundImage] isEqual:[UIImage imageNamed:@"image1.png"]]){
      // do something
}

当应用程序处于活动状态时,代码可以正常工作。但是,当应用程序从空闲状态返回时,上述代码不起作用。

知道为什么会这样吗?

由于

1 个答案:

答案 0 :(得分:2)

从后台返回后图片无法比较,因为您正在使用[UIImage imageNamed:@"image1.png"]创建该图像的新实例以进行比较(通过查看其哈希值来比较图像,而不是通过看实际的图像内容)。如果为图像创建属性,当您第一次使用imageNamed:时,并在比较中使用它,它应该可以正常工作。所以,我测试了这段代码,当我从后台回来后检查时它返回true(我在IB中设置了按钮的背景图像)。

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIButton *greenButton;
@property (strong,nonatomic) UIImage *greenPng;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.greenPng = [UIImage imageNamed:@"Green.png"];
}

- (IBAction)checkImages:(id)sender {

    BOOL isTheSame = [self.greenButton.currentBackgroundImage isEqual:self.greenPng];
    NSLog(@"The images are %@",isTheSame? @"the same" : @"different");
    NSLog(@" button image hash is %d",self.greenButton.currentBackgroundImage.hash);
    NSLog(@" imageNamed image hash is %d",self.greenPng.hash);
}

编辑后:我不确定我的解释是否正确 - 在应用程序的一次运行中,您可以多次调用imageNamed:,并且返回的所有图像都将具有相同的哈希(包括您在IB中选择的图像,如果您这样做)。我认为这是因为兑现。在任何情况下,当您从后台返回并再次调用imageNamed:时,它将返回具有不同散列的图像。