我正在尝试将按钮中的图像与另一个图像进行比较,但它没有按预期工作并且作为 stackoverflow 建议......
if (favoriteButton.imageView.image == [UIImage imageNamed:@"favorite.png"]) {
NSLog(@"yes!");
}
我还能做什么?我试图获取图像文件名,但这似乎是不可能的。
我正在尝试将按钮中的图像与另一个图像进行比较,但它没有按预期工作并且作为 stackoverflow 建议......
if (favoriteButton.imageView.image == [UIImage imageNamed:@"favorite.png"]) {
NSLog(@"yes!");
}
我还能做什么?我试图获取图像文件名,但这似乎是不可能的。
我发现了这个:如何比较两个 UIImage 对象
这就是我认为可能有帮助的:
- (BOOL)image:(UIImage *)image1 isEqualTo:(UIImage *)image2
NSData *data1 = UIImagePNGRepresentation(image1);
NSData *data2 = UIImagePNGRepresentation(image2);
return [data1 isEqual:data2];
}
为什么不尝试用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!");
}
尝试这个
必须检查您的按钮名称和扩展名。它必须相同。
-(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];
}
}
阅读您问题的评论,我认为您只需为按钮分配“状态”,例如“已选择”。
在正常状态下,按钮云加载“not_favorite.png”。如果用户点击按钮,它将处于选定状态,并且将加载相应的图像(favorite.png)。
将来,如果您需要知道加载了哪个图像(或者如果用户已经点击按钮使其成为收藏夹),您可以检查按钮的状态。
就我个人而言,我不会为了触发按钮的动作而比较图像。这将是昂贵的。
UIImage
是一个类,而不是本机类型。您应该使用isEqual:
方法而不是==
运算符来查看两个对象是否表示相同的数据。
if ([favoriteButton.imageView.image isEqual:[UIImage imageNamed:@"favorite.png"]]) {
NSLog(@"yes!");
}
==
如果您真的想查看两个指针是否引用内存中完全相同的位置,请仅将运算符与对象指针一起使用。