0

CGPointのNSArrayがあります。

実際には、その配列内のすべてのCGPointを含む最小限のCGRectを取得したいと思います。これを行うためのiOS機能はすでにありますか?

それ以外の場合は、手動でフェッチ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 に答える