2011-02-03 11 views
0

私は、(iOS上で)長方形の卵形を描いており、それをパーティクルの境界として使用したいと考えています。私の考えは、カーブパスを使用してUIViewを作成し、hitTest:withEvent:またはpointInside:withEvent:を使用して境界衝突を適用することです。pointInsideを呼び出すことは可能ですか:不規則な形ですか?

問題はもちろん、UIViewは常に長方形です。ポイントがこのような不規則な形の中にあるかどうかをチェックする方法はどうでしょうか?

- (void)drawRect:(CGRect)rect { 
int w = rect.size.width; 
int h = rect.size.height; 
CGContextBeginPath(context); 
CGContextMoveToPoint(context, w/2, h/5); 
CGContextAddCurveToPoint(context, w*0.1, h/4.3, w*0.1, h*0.82, w/2, h*0.8); 
CGContextAddCurveToPoint(context, w*0.9, h*0.82, w*0.9, h/4.3, w/2, h*0.2); 

私はそれが価値があるもののために、openFrameworksを使用しています。このコードはちょうどObj-Cですが、私はそこからC++/obj-C++のソリューションを利用できます。

答えて

2

CGPathRefを作成する場合はCGPathContainsPointを使用できます。同じCGPathRefを使用して、コンテキストにレンダリングすることができます。パスを含むコンテキストでCGContextPathContainsPointを呼び出すこともできますが、テストが必要なときにはコンテキストを持たない場合があります。もう1つの選択肢はUIBezierPathcontainsPointセレクタです。

+0

これはiOSで可能ですか?私の 'CGPath'sは私の' CGContextMoveToPoint'(等)のように描画されていません。 'UIBezierPath'はスーパーですが、それはiOSにもありません。 (申し訳ありませんが、現在iOSを指定する元の質問を更新しています) – buildsucceeded

+0

CGPathContainsPointはiOS 2.0以降で、UIBezierPathはiOS 3.2以降です。 –

+0

この情報をお寄せいただきありがとうございます! – buildsucceeded