2013-05-16 4 views
0

Я вижу, что есть методы, которые обеспечивают прямоугольникиСоюз B минус пересечение B

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

Но есть метод, который обеспечивает область или список координат, которая имеет соединение B минус A пересечение B. Где A - большой прямоугольник, B - маленький прямоугольник, полностью содержащийся в нем?

+0

'CGRectContainsRect (rect1, rect2)' должен помочь? Он вернется, если первый прямоугольник (rect1) содержит второй (rect2). Затем, с '[rect2 frame]', вы должны получить то, что хотите ... – Larme

+0

Это будет пересечение B ... Но я ищу A B B минус A пересечение B –

+1

Если B полностью содержится в A то это не объединение B == A и A пересечение B == B? –

ответ

0

Как вы бы описали список координат, какой тип данных вы бы использовали? CGRects использует поплавковые координаты, поэтому ясно, что вы не можете иметь набор (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); 
} 
0

Я думаю, вы имеете в виду «привлечь к экрану» на «обеспечить область»: Используйте 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(); 
Смежные вопросы