0

我有一个 NSArray 的 CGPoints。

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

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

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

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

(我知道,我可以手动过滤数组,但是来吧!...)

4

2 回答 2

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);
    }
}
于 2012-12-20T09:14:14.517 回答
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);
于 2012-12-19T17:20:04.137 回答