検索エリア
-(CGSize)areaOfRect:(CGRect)outerRect minusRect:(CGRect)innerRect
{
return (outerRect.size.width - innerRect.size.width) * (outerRect.size.height - innerRect.size.height);
}
検索rects
typedef void(^RectCompletion)(CGRect topRect,CGRect leftRect,CGRect rightRect,CGRect bottomRect);
-(void)rectsForRect:(CGRect)outerRect minusRect:(CGRect)innerRect withCompletion:(RectCompletion)completion
{
// First sanity..
// You'll need to build up a list of prerequisite checks
if (innerRect.origin.x < outerRect.origin.x)
outerRect.origin.x = innerRect.origin.x;
if (innerRect.origin.y < outerRect.origin.y)
outerRect.origin.y = innerRect.origin.y;
if (innerRect.origin.x + innerRect.size.width > outerRect.origin.x + outerRect.size.width)
NSLog(@"Trim to edge");
if (innerRect.origin.x > outerRect.origin.x + outerRect.size.width || innerRect.origin.y > outerRect.origin.y + outerRect.size.width)
NSLog(@"Trim to edge");
// etc...
// Assuming the rect is always in bounds below should give you the 4 rects surrounding the inner rect..
// With overlap..
CGRect topRect = CGRectMake(outerRect.origin.x, outerRect.origin.y, outerRect.size.width, innerRect.origin.y);
CGRect leftRect = CGRectMake(outerRect.origin.x, outerRect.origin.y, innerRect.origin.x, outerRect.size.height);
CGRect rightRect = CGRectMake(innerRect.origin.x + innerRect.size.width, outerRect.origin.y, outerRect.size.width - (innerRect.origin.x + innerRect.size.width), outerRect.size.height);
CGRect bottomRect = CGRectMake(outerRect.origin.x, outerRect.size.height - (innerRect.origin.y + innerRect.size.height), outerRect.size.width, outerRect.size.height - (innerRect.origin.y + innerRect.size.height));
// No overlap
CGRect topRect = CGRectMake(outerRect.origin.x, outerRect.origin.y, outerRect.size.width, innerRect.origin.y);
CGRect leftRect = CGRectMake(outerRect.origin.x, innerRect.origin.y, innerRect.origin.x, innerRect.size.height);
CGRect rightRect = CGRectMake(innerRect.origin.x + innerRect.size.width, innerRect.origin.y, outerRect.size.width - (innerRect.origin.x + innerRect.size.width), innerRect.size.height);
CGRect bottomRect = CGRectMake(outerRect.origin.x, outerRect.size.height - (innerRect.origin.y + innerRect.size.height), outerRect.size.width, outerRect.size.height - (innerRect.origin.y + innerRect.size.height));
completion(topRect,leftRect,rightRect,bottomRect);
}
「私たちはR1にR2を引く場合は、我々が持っているエリアを送信したいと思います(これらの二つのrectsが同じ範囲から作業していると仮定)入力としてrectを取る私の方法に。 R2をR1に捨てる?ハァッ!入力としてのrect?あなたは2つの長方形を持っています。 –
x + yとw + hを使用してその図形を表すことはできません。 – trojanfoe
私は3つの長方形を表現し、それらを一つずつ送るでしょうか? –