[英]NSPredicate on an NSArray of CGPoints
我有一个CGPoints的NSArray。
我实际上想获得包含该数组中所有CGPoint的最小CGRect。 已经有任何iOS功能可以执行此操作吗?
否则,我将不得不手动获取minX, maxX, minY, maxY
,并以这种方式构造CGRect:
CGrectMake(minX, minY, maxX-minX, maxY-minY);
为此,我需要使用NSPredicate过滤NSArray。
(我知道,我可以手动过滤数组,但是来吧!...)
没有任何公共API可以满足您的要求。 您必须自己编写。
无论如何,它不适用于NSPredicate
。 谓词用于过滤值,而不用于构造新值。
CGRect boundsOfPointArray(NSArray *array) {
CGRect bounds = CGRectNull;
for (NSValue *wrapper in array) {
CGRect r = (CGRect){ wrapper.CGPointValue, CGSizeZero };
bounds = CGRectUnion(bounds, r);
}
}
这个问题还不清楚。 您是否要创建一个最小的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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.