NSPredicate在NSArray的CGPoints上

时间:2012-12-19 16:34:43

标签: ios nspredicate cgrect cgpoint

我有一个CGPoints的NSArray。

我实际上想要获得包含该数组中所有CGPoints的最小CGRect。 是否有任何iOS功能可以做到这一点?

否则我将不得不手动获取minX, maxX, minY, maxY,并以这种方式构建我的CGRect:

CGrectMake(minX, minY, maxX-minX, maxY-minY);

为此,我需要使用NSPredicate过滤NSArray。

(我知道,我可以手动过滤阵列,但请加油!......)

2 个答案:

答案 0 :(得分:2)

没有公共API可以满足您的要求。你必须自己写。

无论如何,NSPredicate都不合适。谓词用于过滤值,而不是用于构造新值。

CGRect boundsOfPointArray(NSArray *array) {
    CGRect bounds = CGRectNull;
    for (NSValue *wrapper in array) {
        CGRect r = (CGRect){ wrapper.CGPointValue, CGSizeZero };
        bounds = CGRectUnion(bounds, r);
    }
}

答案 1 :(得分:1)

这个问题非常不清楚。你的意思是你想要创建一个包含数组中所有点的最小CGRect吗?如果是这样,那很简单,只需遍历点阵列,跟踪minX,maxX,minY和maxY。例如

CGFloat minX = CGFLOAT_MAX;
CGFloat minY = CGFLOAT_MAX;
CGFloat maxX = -CGFLOAT_MAX;
CGFloat maxY = -CGFLOAT_MAX;

for (NSValue *v in pointsArray) {
    CGPoint p = [v CGPointValue];
    minX = fminf(minX, p.x);
    minY = fminf(minY, p.y);
    maxX = fmaxf(maxX, p.x);
    maxY = fmaxf(maxY, p.y);
}

CGRect r = CGRectMake(minX, minY, maxX - minX, maxY - minY);