使用MKCircle检测Swift 2.0中的CGPathContainsPoint

时间:2016-01-24 21:44:11

标签: swift cgpath mapkitannotation cgpathref mkcircle

我正在尝试检测地图注释是否在MKCircle中。我不知疲倦地遍历互联网,很幸运能为Swift 2.0找到一个可靠的教程。所有教程或Stack Overflow问题都可以使用不推荐的代码或Objective-C来回答。不幸的是,我对Swift很新,所以翻译答案有点困难。

到目前为止我所拥有的:

到目前为止,我已经宣布了一个看似MKCircle的圆圈,

SelectionChanged

我最终希望使用CGPathContainsPoint来检测Annotation是否在此圈内。 CGPathContainsPoint的定义如下,

let location = CLLocationCoordinate2D(latitude: 36.9900,
        longitude: -122.0605)
let circle = MKCircle(centerCoordinate: location, radius: 100)

其中,
path - 检查点的路径 m - 仿射变换(不确定这个目的是什么,但大多数问题都将这个参数设置为零)
要点 - 问题的要点
eoFill - 使用偶数填充(真或假,再次不确定,但大多数问题都设置为假)

我的问题:如何转换或翻译我的MKCircle,使其表现为CGPath,以便将其传递到CGPathContainsPoint并将我的CLLocationCoordinate2D转换为CGPoint?

1 个答案:

答案 0 :(得分:2)

为什么要使用复杂的路径评估来确定某个点是否在圈内?你所描述的内容的某些变化可能对测试任意复杂区域的点有意义,但你所说的是一个圆圈。圆的定义是距离所选点(中心)一定距离(半径)的点集。所以:

  1. 为您的圈子中心和要测试的点创建CLLocation个对象。
  2. 使用distanceFromLocation:方法查找它们之间的距离。
  3. 如果距离小于100米(圆的半径),则目标点位于圆内。否则就在外面。