关于蒙面UIView的UIGestureRecogniser?

时间:2012-10-19 15:50:16

标签: iphone ios ipad core-graphics uigesturerecognizer

有没有办法知道'tap'是在UIView的蒙面区域内还是外?我正在使用CoreGraphics掩盖UIView。

Tap Location Diagram

到目前为止,我的代码就是这样......

- (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
     }
}

谢谢。

2 个答案:

答案 0 :(得分:5)

我终于找到了我想要的解决方案。因此,任何试图找到的人都可以在任何CGPath中找到CGPoint。

很简单。

UIBezierPath *p = [UIBezierPath bezierPathWithCGPath:anyCGPath];

BOOL isInPath = [p containsPoint:anyCGPoint];

答案 1 :(得分:2)

基本上你需要检查触摸坐标并确定是否落入遮罩区域。覆盖hitTest:withEvent:和帐户图像掩码。您可以在覆盖的` - [UIView hitTest:withEvent:]中使用[[[self layer] presentationLayer] hitTest:aPoint][[[self layer] mask] hitTest:aPoint]

[编辑]

Check if a user tapped near a CGPath可能有助于找到问题的答案。

[编辑]

请在您的手势处理程序中跟踪以确定是否处理点击。

  1. 指定圆圈的中心(这将是UIView.Center为CGPoint)
  2. 指定饼图半径
  3. 当用户点击视图时,将位置作为点 - CGPoint并计算point.x*point.x+point.y*point.y(圆公式),此值必须小于或等于半径的平方,即radius*radius。如果满足此条件,则您的分接点位于圆圈内,否则位于外部。
  4. 希望说清楚。