3

「タップ」がUIViewのマスクされた領域の内側にあるか外側にあるかを知る方法はありますか?CoreGraphicsを使用してUIViewをマスクしています。

ロケーション図をタップします

これまでのところ、私のコードは次のようになります。

- (void)viewDidLoad {

    UIGestureRecogniser *r = [[UIGestureRecogniser alloc] initWithTarget:self action:@selector(gestCall:)];
    [self addGestureRecogniser:r];

}

- (void)gestCall:(UIGestureRecogniser *)gestRec {
     if ("somthing") {
        // outside of mask
     } else {
        // inside of mask
     }
}

ありがとうございました。

4

2 に答える 2

5

私はついに私が探していた解決策を見つけました。したがって、見つけようとする人の利益のために、CGPointは任意のCGPath内にあります。

簡単だ。

UIBezierPath *p = [UIBezierPath bezierPathWithCGPath:anyCGPath];

BOOL isInPath = [p containsPoint:anyCGPoint];
于 2012-10-30T15:06:51.383 に答える
2

基本的には、タッチ座標を確認し、マスク領域に該当するかどうかを判断する必要があります。とをオーバーライドしてhitTest:withEvent:、イメージマスクを考慮します。[[[self layer] presentationLayer] hitTest:aPoint]または[[[self layer] mask] hitTest:aPoint]オーバーライドされた`-[UIViewhitTest:withEvent:]を使用できます。

[編集]

CGPathの近くをタップしたユーザーが、質問に対する回答を見つけるのに役立つかどうかを確認します。

[編集]

ジェスチャハンドラで次の手順を実行して、タップを処理するかどうかを判断します。

  1. 円の中心を指定します(これはCGPointとしてUIView.Centerになります)
  2. 円グラフの半径を指定します
  3. ユーザーがビューをタップすると、位置をポイントとして取得します-CGPointおよび計算point.x*point.x+point.y*point.y(円の式)。この値は、半径の2乗以下である必要がありますradius*radius。この条件が満たされた場合、タップポイントは円の内側にあり、そうでない場合は外側にあります。

それが明らかになることを願っています。

于 2012-10-19T16:09:15.617 に答える