0

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

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

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

4

5 回答 5

0

我发现了这个:如何比较两个 UIImage 对象

这就是我认为可能有帮助的:

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

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

    return [data1 isEqual:data2];
}
于 2013-04-26T18:23:50.403 回答
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!");
}
于 2013-04-27T07:15:39.140 回答
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];
        }
    }
于 2013-04-27T12:32:53.973 回答
0

阅读您问题的评论,我认为您只需为按钮分配“状态”,例如“已选择”。

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

将来,如果您需要知道加载了哪个图像(或者如果用户已经点击按钮使其成为收藏夹),您可以检查按钮的状态。

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

于 2013-04-26T19:11:05.177 回答
0

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

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

==如果您真的想查看两个指针是否引用内存中完全相同的位置,请仅将运算符与对象指针一起使用。

于 2013-04-26T17:49:29.273 回答