좋아, 질문을 작성하는 동안 솔루션에 도달하므로 해결책을 말씀 드리겠습니다.
먼저, MKPolyline 클래스를
fileprivate class ForegroundOverlay: MKPolyline{
}
fileprivate class BackgroundOverlay: MKPolyline{
}
두 번째 연장 두 개의 클래스를 생성해야합니다, 당신은 당신이 위치 업데이트에
var positions = [CLLocationCoordinate2D]()
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let userLocation:CLLocation = locations[0] as CLLocation
positions.append(userLocation.coordinate)
print("Nuber of locations \(positions.count)")
print("user latitude = \(userLocation.coordinate.latitude)")
print("user longitude = \(userLocation.coordinate.longitude)")
speedIndicator.text = "Speed: \(userLocation.speed * 3.6). Altitude: \(userLocation.altitude)"
let fPolyLine = BackgroundOverlay(coordinates: positions, count: positions.count)
mapView.addOverlays([fPolyLine], level: MKOverlayLevel.aboveRoads)
let bPolyLine = ForegroundOverlay(coordinates: positions, count: positions.count)
mapView.addOverlays([bPolyLine], level: MKOverlayLevel.aboveRoads)
}
셋째 트리거되는 이벤트를 수정해야 폴리선이 하나 또는 다른 클래스인지 묻습니다.
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
let renderer = MKPolylineRenderer(polyline: overlay as! MKPolyline)
if overlay is ForegroundOverlay {
renderer.strokeColor = UIColor(red: 230/255, green: 230/255, blue: 1, alpha: 0.5)
renderer.lineWidth = 10
} else {
renderer.strokeColor = UIColor(red: 0, green: 0, blue: 1, alpha: 0.5)
renderer.lineWidth = 30
}
return renderer
}
결과는이
모양을