与按钮图像的图像比较

时间:2013-04-26 17:45:23

标签: ios objective-c uiimage

我正在尝试将按钮中的图像与另一个图像进行比较但是它没有按预期工作,而是作为stackoverflow建议......

if (favoriteButton.imageView.image  == [UIImage imageNamed:@"favorite.png"]) {
    NSLog(@"yes!");
}

我还能做什么?我试图获取图像文件名,但似乎不可能。

5 个答案:

答案 0 :(得分:0)

UIImage是一个类,而不是本机类型。您应该使用isEqual:方法,而不是==运算符来查看这两个对象是否代表相同的数据。

if ([favoriteButton.imageView.image isEqual:[UIImage imageNamed:@"favorite.png"]]) {
    NSLog(@"yes!");
}

如果你真的想看看两个指针是否在内存中引用完全相同的位置,那么只使用带有对象指针的==运算符。

答案 1 :(得分:0)

我发现了这个:How to compare two UIImage objects

这是我叮叮当当可能会有所帮助:

- (BOOL)image:(UIImage *)image1 isEqualTo:(UIImage *)image2

    NSData *data1 = UIImagePNGRepresentation(image1);
    NSData *data2 = UIImagePNGRepresentation(image2);

    return [data1 isEqual:data2];
}

答案 2 :(得分:0)

阅读你的问题的评论,我认为你云只是给按钮分配一个“状态”,如“选中”。

在正常状态下,按钮云加载“not_favorite.png”。如果用户点击按钮,它将处于选中状态,相应的图像(favorite.png)将加载。

将来如果您需要知道加载了哪个图像(或者用户已经在按钮上粘贴以使其成为最喜欢的图像),您只需检查按钮的状态。

就个人而言,我不会仅仅为了触发按钮动作来比较图像。这将是昂贵的。

答案 3 :(得分:0)

为什么不尝试使用imageView来识别图片?

UIImageView *imageView_favorite = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"favorite.png"]];
UIImageView *imageView_not_favorite = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"not_favorite.png"]];

//both imageView_favorite and imageView_not_favorite can be set as an member ivar, and the favoriteButton.imageView can be set to them appropriately.

if (favoriteButton.imageView  == imageView_favorite) {
    NSLog(@"yes!");
}

答案 4 :(得分:0)

试试这个

必须检查您的按钮名称和扩展名。它必须是一样的。

    -(IBAction)btnMaleClick:(id)sender { 
        if (btnMale.imageView.image == [UIImage imageNamed:@"radiobtn.png"]) {
            [btnMale setImage:[UIImage imageNamed:@"radiobtnselected.png"] forState:UIControlStateNormal];
            [Female setImage:[UIImage imageNamed:@"radiobtn.png"] forState:UIControlStateNormal];
        }
        else {
            [btnMale setImage:[UIImage imageNamed:@"radiobtn.png"] forState:UIControlStateNormal];
            [Female setImage:[UIImage imageNamed:@"radiobtnselected.png"] forState:UIControlStateNormal];
        }
    }