我有两个阵列,其中包括5张背景为纯色的照片。这是用于将图像放入数组的代码:
self.colorArray = @[
[UIImage imageNamed:@"orange_square"],
[UIImage imageNamed:@"purple_square"],
[UIImage imageNamed:@"red_square"],
[UIImage imageNamed:@"blue_square"],
[UIImage imageNamed:@"green_square"],
];
self.iconColorArray = @[
[UIImage imageNamed:@"orange_icon"],
[UIImage imageNamed:@"purple_icon"],
[UIImage imageNamed:@"red_icon"],
[UIImage imageNamed:@"blue_icon"],
[UIImage imageNamed:@"green_icon"],
];
正如您所看到的,图像按照背景颜色分别按顺序排列。 (我为阵列使用不同的图像,因为iconColorArray
用于较小的UIImageView
)
该应用随机更改两个UIImageViews
的图像。
我想要的是if-else语句来比较两个数组以查看是否使用了相同的objectAtIndex
。 Exp:如果orange_square
用于一个UIImageView
而orange_icon
用于另一个,则if-else语句中的条件将返回true。
基本上回答我的问题,请告诉我如何获取数组中UIImageView
使用的对象的索引。
编辑: 使用Matt的建议,我将代码更改为:
NSUInteger d = [self.colorArray indexOfObject:self.squareOne.image];
NSUInteger e = [self.iconColorArray indexOfObject:self.icon.image];
现在,我可以比较它们。
答案 0 :(得分:0)
您可以创建第三个对象作为字典,其中图像方形名称的名称是键是键。然后你colorArray和iconColorArray可以从这本词典中得到。
self.imageMap = { @"orange_square" : @"orange_icon",
@"purple_square" : @"purple_icon" }
- (BOOL)squareUsed:(UIImage *)square isSameAsIcon:(UIImage *)iconUsed {
for (NSString *key in self.imageMap) {
if ([[UIImage imageNamed:key] isEqual:square]) {
if ([UIImage imageNamed:self.imageMap[key]] isEqual:iconUsed]) {
return YES;
}
// We matched the square and the icon didn't match.
return NO;
}
}
// We never matched the square. Assert?
return NO;
}
答案 1 :(得分:0)
获取对象索引的方式是(等待它)indexOfObject:
。
问题在于使用此方法预先假定可以比较此对象的相等性。我不知道UIImage是否会这样做;我很怀疑,但你可以试试。
另一种可能性是indexOfObjectIdenticalTo:
;如果图像未被图像视图复制,但可能工作,但它是与图像中图像同一图像的实际参考。
说了这么多,我会做什么?他们都不是。我甚至不会保留图像阵列;它非常浪费内存,你的应用程序可能会在它开始运行之前崩溃。我要做的是保留一组图像的名称;字符串很小,图像很大。为了进行比较,我会将UIImageView子类化为name
属性,以便我可以分配名称和图像,现在问题很简单。
或者你甚至可以通过他们自己的视图控制器显示图像,并为视图控制器提供name
属性。事实上,我碰巧有这样做的一个例子:
事实上,如果你探索该项目的其余部分,你会发现我正在按照你的要求去做:要了解pep boy正在展示什么,我问Pep对象的{{1字符串和我在Pep boy 列表中查找其索引:
它在Swift中,所以我使用boy
而不是find
,但这相同。