0

長方形を提供するメソッドがあることがわかりました

CGRect CGRectIntersection(CGRect r1, CGRect r2)
CGRectUnion(CGRect r1, CGRect r2)

しかし、A ユニオン B から A 交点 B を差し引いた座標の領域またはリストを提供するメソッドはありますか? A は大きな四角形で、B はそれに完全に含まれる小さな四角形です。

4

2 に答える 2

0

「領域を提供する」ことで「画面に描画する」ことを意味していると思います.2つの長方形と偶奇塗りつぶしルールでCGPathを使用します。

// create a graphics context with the C-API of the QuartzCore framework
// the graphics context is only required for drawing the subsequent drawing
CGRect compositionBounds = CGRectMake(30, 30, 300, 508);
UIGraphicsBeginImageContext(compositionBounds.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();

// create a mutable path with QuartzCore
CGMutablePathRef p1 = CGPathCreateMutable();
CGRect r1 = CGRectMake(20, 300, 200, 100);
CGPathAddRect(p1, nil, r1);
CGPathAddRect(p1, nil, CGRectInset(r1, 10, 10));

// draw our mutable path to the context filling its area
CGContextAddPath(ctx, p1);
CGContextSetFillColorWithColor(ctx, [[UIColor redColor] CGColor]);
CGContextEOFillPath(ctx);

// display our mutable path in an image view on screen
UIImage *i = UIGraphicsGetImageFromCurrentImageContext();
UIImageView *iv = [[UIImageView alloc] initWithImage:i];
[self.view addSubview:iv];
iv.frame = self.view.frame;

// release ressources created with the C-API of QuartzCore
CGPathRelease(p1);
UIGraphicsEndImageContext();
于 2013-06-20T08:28:10.560 に答える
0

座標のリストをどのように表現しますか?どのデータ型を使用しますか? CGRects は float 座標を使用するため、明らかに (x, y) ポイントのセットを持つことはできません。ユニオンからインターセクションを差し引いたものを個別の CGRects の束に分解すると思いますが、かなり面倒なようです。おそらく、達成しようとしていることを正確にもう少し明確にすることができますか?

あなたの質問に答えるために、次のようなものはどうですか:

BOOL CGPointIsInUnionButNotIntersectionOfRects(CGRect r1, CGRect r2, CGPoint p)
{
    CGRect union = CGRectUnion(r1, r2);
    CGRect intersection = CGRectIntersection(r1, r2);
    return CGRectContainsPoint(union) && !CGRectContainsPoint(instersection);
}
于 2013-05-16T14:40:04.983 に答える