How to compare two UIImage in iOS 8 [duplicate]

2019-05-22 12:35发布

问题:

This question already has an answer here:

  • UITableViewCell.ImageView.image Compare UIImage 3 answers

I am using the method given below

IBOutlet UIImageView *imgViewCheck;

- (IBAction)clkCheckUncheck:(id)sender {
    if (imgViewCheck.image == [UIImage imageNamed:@"uncheck.png"]) {
        imgViewCheck.image = [UIImage imageNamed:@"check.png"];
    } else {
        imgViewCheck.image = [UIImage imageNamed:@"uncheck.png"];
    }
}

It is working in up to iOS7 but not working in iOS8

回答1:

Please compare NSData object instead of comparing UIImage Object.

-(BOOL)firstimage:(UIImage *)image1 isEqualTo:(UIImage *)image2 {
    NSData *data1 = UIImagePNGRepresentation(image1);
    NSData *data2 = UIImagePNGRepresentation(image2);

    return [data1 isEqualToData:data2];
}


回答2:

I'd not rely on comparing image property with address returned by UIImage method (it could be newly allocated block I suppose).

If you really need to compare if data(image) is same you could use something like:

UIImage* checkImage = [UIImage imageNamed:@"check.png"];
NSData *checkImageData = UIImagePNGRepresentation(checkImage);
NSData *propertyImageData = UIImagePNGRepresentation(imgViewCheck.image);
if ([checkImageData isEqualToData:propertyImageData]) {
  //do sth
}

where possible I'd prefer to keep state/imageId in a variable for comparison purposes