繁体   English   中英

CGPoints NSArray上的NSPredicate

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM