问题描述
我们有一组坐标,我们想遍历它们绘制一条路径。硬编码的值就是这样:
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
,但是没有longitude
和latitude
有一个方便的CGContext.addLines(between:)
方法可以做到这一点。这是来自文档的描述:
调用此便捷方法等效于调用move(to :) 点数组中第一个值的方法,然后调用 每个后续点的addLine(to :)方法,直到数组为 累。调用此方法后,路径的当前点是 数组中的最后一点。
用法:
let cgPoints = coordinates.map { CGPoint(x: $0.longitude,y: $0.latitude) }
ctx.addLines(between: cgPoints)