如何遍历坐标数组以绘制CGPath?

问题描述

我们有一组坐标,我们想遍历它们绘制一条路径。硬编码的值就是这样:

MessageHandler

但是我们尝试不进行硬编码,而是创建一个采用如下坐标数组的函数

 func createPath(){
        path.move(to: CGPoint(x: 32.7915055,y: -96.8028408))//1
        path.addLine(to: CGPoint(x: 32.79174845,y: -96.80252195))
        path.addLine(to: CGPoint(x: 32.7919914,y: -96.8022031))//2
        path.addLine(to: CGPoint(x: 32.791501100000005,y: -96.80235195))
        path.addLine(to: CGPoint(x: 32.7910108,y: -96.8025008))//3
        path.addLine(to: CGPoint(x: 32.791301700000005,y: -96.8020985))
        path.addLine(to: CGPoint(x: 32.7915926,y: -96.8016962))//4
        path.addLine(to: CGPoint(x: 32.79154905,y: -96.8022685))
        
    }

问题是如何获取“ path.move”数组中的第一个坐标,然后使用附加坐标在函数的“ path.addLine”部分中使用?

解决方法

枚举数组并测试其索引:

  for (index,coordinate) in coordinates.enumerated() {
        if index == 0 {
            path.move(to: CGPoint(x: coordinate.longitude,y:coordinate. latitude))
        } else {
            path.addLine(to: CGPoint(x: coordinate.longitude,y: coordinate.latitude))
        }
  }

还请注意,CLLocationCoordinate2D既没有x也没有y,但是没有longitudelatitude

,

有一个方便的CGContext.addLines(between:)方法可以做到这一点。这是来自文档的描述:

调用此便捷方法等效于调用move(to :) 点数组中第一个值的方法,然后调用 每个后续点的addLine(to :)方法,直到数组为 累。调用此方法后,路径的当前点是 数组中的最后一点。

用法:

let cgPoints = coordinates.map { CGPoint(x: $0.longitude,y: $0.latitude) } 
ctx.addLines(between: cgPoints)