我有一个CGPoints的NSArray。
我实际上想要获得包含该数组中所有CGPoints的最小CGRect。 是否有任何iOS功能可以做到这一点?
否则我将不得不手动获取minX, maxX, minY, maxY
,并以这种方式构建我的CGRect:
CGrectMake(minX, minY, maxX-minX, maxY-minY);
为此,我需要使用NSPredicate过滤NSArray。
(我知道,我可以手动过滤阵列,但请加油!......)
答案 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);