我使用以下按钮来比较按钮的背景图像。
if([[button currentBackgroundImage] isEqual:[UIImage imageNamed:@"image1.png"]]){
// do something
}
当应用程序处于活动状态时,代码可以正常工作。但是,当应用程序从空闲状态返回时,上述代码不起作用。
知道为什么会这样吗?
由于
答案 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:时,它将返回具有不同散列的图像。