检查一组坐标是否包含在一个形状内部。

5

可能重复:
检测CGPoint是否在多边形内

我有一组UIEvent中的触摸坐标。 是否有一种方法可以检查它们是否包含在我定义的某个形状 - 多边形 - 内?

我有Java经验,我会使用polygon类并调用contains(int x, int y)方法。 在Cocoa Touch中是否有类似的方法呢?

3个回答

3
如果您将多边形定义为CGPath,则可以使用CGPathContainsPoint()... 您能告诉我们更多关于您应用程序的概念吗?
编辑:
还有更高级别的UIBezierPath和/或NSBezierPath.. 这两个对象都有一个-containsPoint方法。

谢谢。这正是我正在寻找的。我找了好久都没找到这个解决方案。 - user1941895
好的,这是使用Core Graphics C API,因此它不在Obj-C或C++的级别上...因此它不会出现在Obj-C类文档中。 - nielsbot

2

2
但是o.p.特别询问了多边形的问题... - nielsbot
好的,那我投票关闭为重复。 - nielsbot

0

也许你正在做一些不寻常的事情,比如你只想在三角形内检测触摸事件。如果是这样,你可以忽略这个建议。但由于你是iOS新手,我建议你使用UIControl子类与目标-动作对或UIGestureRecognizer

示例代码如下:

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];

稍后在target中,可能是您的视图控制器,您将实现该方法:

- (void)buttonPressed:(id)sender
{
}

使用手势识别器,您可以将手势识别器添加到 UIView 中,并像使用 UIControl 一样添加目标-动作对:

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTapped:)];
[self.view addGestureRecognizer:tapRecognizer];

- (void)viewTapped:(UIGestureRecognizer *)recognizer
{
}

这些是基本用户交互的典型方法。使用这些方法比使用touchesBegan等更容易,虽然如果您需要它们,其他回答者已经为您提供了支持。


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