我有一个带有地图的应用程序和许多使用自定义图像制作的注释,我的问题是当我拖动地图或缩放时,注释会显示另一个点(lat,lon)。
所以我很想知道,因为我在其他应用程序中也看到了这个错误,有没有办法解决它(作为总是显示正确的lat和lon的地图注释)。
这是我用于注释的代码:
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if annotation is MKUserLocation {
return nil
}
var reuseId = ""
if annotation is FBAnnotationCluster {
reuseId = "Cluster"
var clusterView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId)
clusterView = FBAnnotationClusterView(annotation: annotation, reuseIdentifier: reuseId, configuration: FBAnnotationClusterViewConfiguration.default())
return clusterView
}else{
reuseId = "pin"
var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId)
if annotationView == nil {
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "pin")
annotationView!.image = UIImage(named: "locat.png")
}
else {
annotationView!.annotation = annotation
}
let cpa = annotation as! FBAnnotation
annotationView!.image = nil
let image = UIImage(named:cpa.nameImage)
annotationView!.image = image
return annotationView
}
}
如果您对我提出的问题或其他任何问题有任何疑问,请随时发表评论。
提前致谢!
修改
我上传video显示我的问题
EDIT2
这是来自地图的video,表明他们的注释没有丢失其纬度和经度。
答案 0 :(得分:1)
您的问题是MKAnnotationView
。centerOffset
您需要在func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?
正如MKAnnotationView文档中所定义
centerOffset属性显示的偏移量(以磅为单位) 图。
var centerOffset:CGPoint
讨论默认情况下, 注释视图的中心点位于坐标点 关联注释。您可以使用此属性重新定位 根据需要注释视图。测量该x和y偏移值 在点。正偏移值将注释视图向下移动到 右边,而负值将它向上移动到左边。
像这样
var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId)
if annotationView == nil {
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "pin")
annotationView!.image = UIImage(named: "locat.png")
//this is an example you must to get in account the form of your current view and what you want, I think your values are CGPoint(x: 0.5, y: 1)
annotationView?.centerOffset = CGPoint(x: 0, y: -((UIImage(named: "locat.png")?.size.height)!/2))
}
else {
annotationView!.annotation = annotation
}
希望这有助于你
答案 1 :(得分:1)
你没有丢失纬度很长但你的纬线长度在你的注释图像的中心,你必须改变anchorPoint。
annotationView?.layer.anchorPoint = CGPoint(x: 0.5, y: 1.0)
in
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {