在 mapkit 中选择替代路线的问题
Issue with selecting alternate route in mapkit
我正在使用 MapKit 的 MKDirection class 在我的应用程序中获取替代路线,这是我显示所有路线的代码。
let directions = MKDirections(request: request)
directions.calculate { response, error in
if error != nil{
self.showAlert(message: "Route not found")
return
}
guard let mapRoute = response?.routes.first else {
return
}
for route in response!.routes{
let newRoute = route
self.mapView.addOverlay(newRoute.polyline)
self.mapView.setVisibleMapRect(
self.mapView.visibleMapRect.union(
newRoute.polyline.boundingMapRect
),
edgePadding: UIEdgeInsets(
top: 0,
left: padding,
bottom: padding,
right: padding
),
animated: true
)
self.mapRoutes.append(newRoute)
}
}
还为地图添加了点击手势,以便我们可以识别用户对select另一条路线的意图,这里是转换触摸点并将其与地图视图的叠加层进行比较的代码。
但是对于一些点击我没有得到正确的路线和错误的覆盖 selected。
@objc func isTappedOnPolygon(with tapGesture:UITapGestureRecognizer) {
let touchPoint = tapGesture.location(in: mapView)
let touchCoordinate = mapView.convert(touchPoint, toCoordinateFrom: mapView)
let mapPoint = MKMapPoint(touchCoordinate)
var selectedOverlay:MKPolyline?
for overlay in mapView.overlays {
if overlay is MKPolyline {
if let polylineRenderer = mapView.renderer(for: overlay) as? MKPolylineRenderer {
let polylinePoint = polylineRenderer.point(for: mapPoint)
if polylineRenderer.path.contains(polylinePoint){
selectedOverlay = overlay as? MKPolyline
break
}
}
}
}
}
谢谢阿伦。
你看到这个答案了吗?
尝试为任何缩放级别设置最大折线宽度:22px。
“此代码检测在每个缩放级别中最大距离为 22 像素的多边形线上的触摸。只需将你的 UITapGestureRecognizer 指向 handleTap:”
How to detect taps on MKPolylines/Overlays like Maps.app?
我正在使用 MapKit 的 MKDirection class 在我的应用程序中获取替代路线,这是我显示所有路线的代码。
let directions = MKDirections(request: request)
directions.calculate { response, error in
if error != nil{
self.showAlert(message: "Route not found")
return
}
guard let mapRoute = response?.routes.first else {
return
}
for route in response!.routes{
let newRoute = route
self.mapView.addOverlay(newRoute.polyline)
self.mapView.setVisibleMapRect(
self.mapView.visibleMapRect.union(
newRoute.polyline.boundingMapRect
),
edgePadding: UIEdgeInsets(
top: 0,
left: padding,
bottom: padding,
right: padding
),
animated: true
)
self.mapRoutes.append(newRoute)
}
}
还为地图添加了点击手势,以便我们可以识别用户对select另一条路线的意图,这里是转换触摸点并将其与地图视图的叠加层进行比较的代码。
但是对于一些点击我没有得到正确的路线和错误的覆盖 selected。
@objc func isTappedOnPolygon(with tapGesture:UITapGestureRecognizer) {
let touchPoint = tapGesture.location(in: mapView)
let touchCoordinate = mapView.convert(touchPoint, toCoordinateFrom: mapView)
let mapPoint = MKMapPoint(touchCoordinate)
var selectedOverlay:MKPolyline?
for overlay in mapView.overlays {
if overlay is MKPolyline {
if let polylineRenderer = mapView.renderer(for: overlay) as? MKPolylineRenderer {
let polylinePoint = polylineRenderer.point(for: mapPoint)
if polylineRenderer.path.contains(polylinePoint){
selectedOverlay = overlay as? MKPolyline
break
}
}
}
}
}
谢谢阿伦。
你看到这个答案了吗?
尝试为任何缩放级别设置最大折线宽度:22px。
“此代码检测在每个缩放级别中最大距离为 22 像素的多边形线上的触摸。只需将你的 UITapGestureRecognizer 指向 handleTap:”
How to detect taps on MKPolylines/Overlays like Maps.app?