构造具有唯一中心的UIView对象的NSArray

时间:2013-10-13 19:05:41

标签: ios objective-c cocoa-touch uiview nsarray

我有一组自定义UIView对象,其中2个或更多对象具有相同的中心,我必须从中构造另一个具有不同中心的数组。最好的方法是什么?

我尝试使用下面的代码,但它不起作用。

self.distinctObjects = [NSMutableArray arrayWithCapacity:iAllObjects.count];

for (MyCustomView *customView in iAllObjects)
{
     BOOL hasDuplicate = [[self.distinctObjects filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF.center == %@", customView.center]] count] > 0;

     if (!hasDuplicate) {
                [self.distinctObjects addObject:customView];
     }
}

2 个答案:

答案 0 :(得分:1)

您无法在struct中使用center(在您的情况下CGPointNSPredicate)。另外直接比较浮点值也不是一个好主意。 您应该关注this answer。只需将[annotation coordinate].latitude替换为myView.center.x,将[annotation coordinate].longitude替换为myView.center.y,依此类推。应该很容易。

BTW您的代码具有O(n ^ 2)复杂度,但如果数组很小,也许这不是问题。

答案 1 :(得分:0)

我用以下代码解决了这个问题:

NSMutableArray *uniqueCenters = [NSMutableArray arrayWithCapacity:iAllObjects.count];
self.distinctObjects = [NSMutableArray arrayWithCapacity:iAllObjects.count];

for (MyCustomView *customView in iAllObjects)
{
    if (![uniqueCenters containsObject:[NSValue valueWithCGPoint:customView.center]]) {
        [uniqueCenters addObject:[NSValue valueWithCGPoint:customView.center]];

        [self.beacons addObject:customView];
    }
}