2016-05-16 9 views
0

で遊んで私は2つの長方形R1とR22 CGRect

--------------------------------- 
|R1        | 
|        | 
|  ------------------  | 
|  |    |  | 
|  | R2   |  | 
|  |    |  | 
--------------------------------- 

R1を持っては最大の一つであり、R2最小のものを表しています。入力としてrectを取る私の方法にR2をR1から引くと、私たちが持っている領域を送信したいと思います。それも可能ですか?それを避けるための任意の措置

+1

「私たちはR1にR2を引く場合は、我々が持っているエリアを送信したいと思います(これらの二つのrectsが同じ範囲から作業していると仮定)入力としてrectを取る私の方法に。 R2をR1に捨てる?ハァッ!入力としてのrect?あなたは2つの長方形を持っています。 –

+3

x + yとw + hを使用してその図形を表すことはできません。 – trojanfoe

+0

私は3つの長方形を表現し、それらを一つずつ送るでしょうか? –

答えて

0

検索エリア

-(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); 
} 
1

R2をR1に引くと、私は入力をrectとして取る方法に私が持っている領域を送りたいと思います。それも可能ですか?

いいえため領域サイズ(CGSize)で表されるが、あなたの方法は、入力としてRECT(CGRect)をとります。

「エリア」と言うと、実際には「シェイプ」を意味するのでしょうか?それでは、あなた自身で形を描かなければなりません。そして、その場合には、あなたが今持っているものがのパス(UIBezierPathやCGPathなど)か、の図のようなものになるので、 "rectを入力として"使うメソッドに送ることはできませんUIImageなど)。あなたはこのスクリーンショットから見ることができるよう

したがって、カットアウト長方形の形状にするために簡単です:

enter image description here

を...しかし、その形状を記述する情報は、として表すことができません単なるrect。

関連する問題