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:图像蒙版的和帐户。您可以在覆盖的 `-[UIView hitTest:withEvent:]中使用[[[self layer] presentationLayer] hitTest:aPoint]或。[[[self layer] mask] hitTest:aPoint]

[编辑]

检查用户是否在 CGPath 附近点击可能有助于找到问题的答案。

[编辑]

在您的手势处理程序中执行以下操作以确定是否处理点击。

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

希望说明清楚。

于 2012-10-19T16:09:15.617 回答