使用 MKCircle 检测 Swift 2.0 中是否有 CGPathContainsPoint

Using MKCircle to detect if CGPathContainsPoint in Swift 2.0

我正在尝试检测地图注释是否在 MKCircle 内。我不知疲倦地浏览了互联网,但运气不佳,找不到 Swift 2.0 的可靠教程。所有教程或 Stack Overflow 问题都使用弃用代码或 Objective-C 进行了回答。不幸的是,我是 Swift 的新手,所以翻译答案有点困难。

我目前拥有的:

到目前为止,我已经用 MKCircle 声明了一个圆,看起来像,

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

我最终想使用 CGPathContainsPoint 来检测 Annotation 是否在这个圆圈内。 CGPathContainsPoint 的定义如下所示,

CGPathContainsPoint(_ path: CGPath?, _ m: UnsafePointer<CGAffineTransform>, _ point: CGPoint, _ eoFill: Bool) -> Bool

其中,
path - 检查点的路径
m - 仿射变换(不确定这样做的目的是什么,但大多数问题都将此参数设置为 nil)
point - 问题点
eoFill - 使用 even-odd Fill(对或错,再次不确定,但大多数问题都设置为 false)

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

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

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