2

だから私は 2 つの UIViews 魔女が bezierpath を描画してからパスを返すことができます。次に、パスにポイントが含まれているかどうかを確認する必要があります。これ[path containsPoint:currentObject.position]は、ビューの 1 つでは機能しますが、他のビューでは機能しません。1 つのビューは iPhone の上半分にあり、もう 1 つのビューは下半分にあります。一番下のは機能しません。ビューを切り替えようとしましたが、同じ問題でした。下のビューは機能しません。

ここにいくつかのコードがあります:

メインビューコントローラーで:

-(void)didEndPath:(UIBezierPath *)path DrawView:(DrawView *)draw {
    if ([path containsPoint:currentObject.position]) {
        //do stuff
    }
}

そして、ドロービュータッチで終了しました:

[self.delegate didEndPath:currentPath DrawView:self];

ビューがself.view以外の別のオリジンを持っている可能性がありますか? どうすれば修正できますか?

編集:

さて、問題は見つかりましたが、解決策は見つかりませんでした。

UIView のタッチ メソッドを this: から this: に変更すると、タッチ startPoint = [touch locationInView:self];startPoint = [touch locationInView:self.superview];正しく読み取られますが、パスは描画されません。それでも問題は下部の uiview だけです。では、スーパービューで場所に触れるパスを返すように変更するにはどうすればよいですか?

4

4 に答える 4

1

2つのパスを作成して問題を解決しました。スーパービューからのポイントのあるものとないもの。それは機能しますが、それが最善の解決策であるかどうかはわかりません。

于 2012-12-09T17:04:28.563 に答える
0

ドキュメントをチェックしてください:

A point is not considered to be enclosed by the path if it is inside an open subpath,   
regardless of whether that area would be painted during a fill operation. Therefore, to
determine mouse hits on open paths, you must create a copy of the path object and  
explicitly close any subpaths (using the closePath method) before calling this method.

私の推測では、サブパスを開いたままにしたので、containsPointはNOを返します。

于 2012-12-09T15:02:03.653 に答える
0

このようにビュー間のポイントを変換できるはずです

CGPoint locationInSuperView = [self convertPoint:point toView:self.superview];
于 2012-12-10T00:03:07.877 に答える