问题描述
我需要在地图上显示图钉(注释).然后从pin到pin绘制多边形线(annotation to annotation)
我收到一个双精度数组,我将其转换为 CLLocationCoordiante2D.第一个 lat 和 long 值始终为 0.0,因此我将它们从数组中删除,因为我不希望那里出现任何问题.
我将双打映射到坐标,并将它们添加到 mapView
我还包含了一个 viewFor 函数,我认为我真的不需要?
地图不会缩放到任何位置,也不会显示图钉.我知道我需要对其进行编码,我需要所有引脚周围的一般半径.在引脚实际出现后,我会继续努力.
另外,我不在乎名字,我只想显示图钉.
我试过设置单个坐标,但仍然没有固定.
在 viewDidLoad() 中正确设置了 mapView 委托
我在调试器中记录了这些位置,它们显示正确.
func createAnnotations() {latitude.remove(at: 0)longitude.remove(at: 0)让坐标 = zip(纬度,经度).地图(CLLocationCoordinate2D.init)AppLogger.logInfo("\(坐标)")让注释 = zip(坐标,名称).map {(坐标,名称)->MKPoint 中的注解让注释 = MKPointAnnotation()annotation.coordinate = 坐标annotation.title = 名称返回注释}mapView.addAnnotations(注解)mapView.showAnnotations(注释,动画:真)}func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) ->MKAnnotationView?{守卫注解是 MKPointAnnotation else { return nil }让标识符 = "注释"var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier)如果 annotationView == nil {annotationView = MKPinAnnotationView(注释:注释,reuseIdentifier:标识符)annotationView!.canShowCallout = true} 别的 {annotationView!.annotation = annotation}返回注解视图}
[__C.CLLocationCoordinate2D(纬度: 41.89454659591164, 经度: -87.67463844121563), __C.CLLocationCoordinate2D(纬度: 41.89424383424124, longitude) -8073) -8073
预期的结果是当显示 mapView 时,我们会看到引脚(注释),以及将它们从第一个引脚连接到最后一个引脚的多边形线.我可以稍后处理的绘制多边形.
你是对的,如果你为你的注解注册注解视图,你不需要 viewFor
,例如
mapView.register(MKPinAnnotationView.self, forAnnotationViewWithReuseIdentifier: MKMapViewDefaultAnnotationViewReuseIdentifier))
但让我们暂时搁置一下.让我们专注于未显示的注释.有两种可能:
确保您确实在添加坐标.
您正在打印
坐标
.尝试打印注释
.即,让我们确保名称不为空,因此注释为空.如果你zip
/map
一个非空数组和一个空数组,最终结果将是空的.(它被缩短到最小数组长度.)确保您完全调用了
viewFor
.假设您已经解决了第一个问题,请尝试在
viewFor
中添加断点或日志语句,并确保它被调用.例如.确保您设置了地图视图的委托等.
I need to display pins ( annotations ) on a map. Then draw polygon lines from pin to pin ( annotation to annotation )
I receive an array of Doubles that I convert to CLLocationCoordiante2D. the first lat and long values are always 0.0 so I remove those from the array because I don't want any issues there.
I map the doubles to the coordinates, and add them to the mapView
I also included a viewFor function with I thought I don't really need?
the map doesn't zoom to any location and NO pins are shown. I know I need to code that in, I will want a general radius around all the pins. Ill work on that after the pins actually show up.
Also, I don't care about names, I just want the pins to show up.
I have tried setting a single coordinate and still no pin.
The mapView delegate is correctly set in viewDidLoad()
I log the locations in debugger and they show up correct.
func createAnnotations() {
latitude.remove(at: 0)
longitude.remove(at: 0)
let coordinates = zip(latitude, longitude).map(CLLocationCoordinate2D.init)
AppLogger.logInfo("\(coordinates)")
let annotations = zip(coordinates, names)
.map { (coordinate, name) -> MKPointAnnotation in
let annotation = MKPointAnnotation()
annotation.coordinate = coordinate
annotation.title = name
return annotation
}
mapView.addAnnotations(annotations)
mapView.showAnnotations(annotations, animated: true)
}
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
guard annotation is MKPointAnnotation else { return nil }
let identifier = "Annotation"
var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier)
if annotationView == nil {
annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
annotationView!.canShowCallout = true
} else {
annotationView!.annotation = annotation
}
return annotationView
}
[__C.CLLocationCoordinate2D(latitude: 41.89454659591164, longitude: -87.67463844121563), __C.CLLocationCoordinate2D(latitude: 41.89424383424124, longitude: -87.67461071330482))]
The expected result is when the mapView is shown, we see the pins ( annotations ), and polygon lines connecting them from first pin to last. the draw polygon I can work on later.
You are correct that you don’t need viewFor
if you register your annotation view for your annotation, e.g.
mapView.register(MKPinAnnotationView.self, forAnnotationViewWithReuseIdentifier: MKMapViewDefaultAnnotationViewReuseIdentifier))
But let’s set that aside for a moment. Let’s focus on the annotation not showing up. There are two possibilities:
Make sure you’re actually adding coordinates.
You’re printing
coordinates
. Try printingannotations
. I.e., let’s make sure that names wasn’t empty and therefore annotations was empty. If youzip
/map
an non-empty array with an empty one, the final result will be empty. (It’s shortened to the minimum array length.)Make sure you
viewFor
is getting called at all.Assuming you’ve fixed the first issue, try adding breakpoint or log statement in
viewFor
and make sure it’s getting called. E.g. make sure you set the delegate of the map view, etc.
这篇关于图钉未显示在 mapView 中.斯威夫特 5的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!