如何检查触摸点是否在UIBezierPath上(iOS)

7

如何判断一个触点(touchesBegan)是否在隐藏的UIBezierPath上?


文档是你的好朋友:http://developer.apple.com/library/ios/documentation/uikit/reference/UIBezierPath_class/Reference/Reference.html#//apple_ref/doc/uid/TP40009276-CH1-SW40 - Rok Jarc
2
我总是需要一些示例代码来理解。 :-/ 因此,文档很好,但不是我的最佳朋友... - headkit
1
没错 - 我认为我们大多数人都能理解 :) 如果Chris没有给你发布示例代码,请随时给我留言... - Rok Jarc
1个回答

10
[bezierPath containsPoint:touchPoint];

确保您的触摸点与bezierPaths的点在相同的坐标系中,并且这些点都在相同的上下文中,即屏幕空间。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint touchPoint = [touch locationInView:self.view];
    if ([self.bezierPath containsPoint:touchPoint])
    {
        // do stuff
    }
}

还要注意:如果您在某个CoreGraphics绘图中使用了UIBezierPath,则需要翻转touchPoint的y轴。

touchPoint.y = self.view.bounds.size.height - touchPoint.y;


虽然我对Objective-C还很陌生,但我想在这里问一下:你能否给我提供更多的代码?那将非常棒!谢谢! - headkit
1
@ChrisHeyes:希望你不介意我把代码从你的评论移到了答案中。 - Rok Jarc
所有坐标都基于视图...视图控制器只是引用视图。我认为你会想要在上面的代码中用self.view替换你的touchPathView,假设你的bezierPath是局部的视图。 - Chris Heyes
优秀的答案。至少我需要知道在视图中不显示路径是否没有问题。我需要隐藏路径。 - headkit
1
非常感谢您,您帮了我很多!现在我发现我的方法朝着错误的方向导致问题。现在我尝试使用带有白色背景上的黑色路径的隐藏掩码图像来解决问题,检查触摸点的颜色是否为黑色... - headkit
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接