Swift 适合注释
Swift fit annotations
我在解析中有几个位置正在查询。它显示所有注释,但只缩放最后一个。我怎样才能找到最大和最小纬度和经度并使它们合适?
Whosebug 上有很多这些,但它们几乎都在 objective-c。
Objective-C 中的示例基本上仍然有效,因为基础 SDK/API 仍然相同——只是使用不同的语言调用(并且始终有文档)。
要显示所有注释,基本上有两种方法:
使用方便的showAnnotations
方法。你传递给它一个注释数组,它会自动计算出一个合理的区域来显示。在添加所有注释后调用它(在 for
循环之后)。事实上,如果注释不在地图上,showAnnotations
甚至会自行添加注释。要显示地图上已有的所有注释,只需将地图自己的 annotations
数组传递给它即可。示例:
self.mapView.showAnnotations(self.mapView.annotations, animated: true)
如果您对showAnnotations
计算出的默认区域不满意,您可以自己计算一个。而不是计算 minimum/maximum 纬度和经度等,我更喜欢使用内置的 MKMapRectUnion
函数来创建一个适合所有注释的 MKMapRect
然后调用 setVisibleMapRect(mapRect,edgePadding,animated)
让一种方便地在拟合地图矩形周围的屏幕点中定义填充。这种技术最初是在 Apple 的一个非常早期的地图视图示例应用程序中发现的。示例:
var allAnnMapRect = MKMapRectNull
for object in objects! {
//existing code that creates annotation...
//existing code that calls addAnnotation...
let thisAnnMapPoint = MKMapPointForCoordinate(annotation.coordinate)
let thisAnnMapRect = MKMapRectMake(thisAnnMapPoint.x, thisAnnMapPoint.y, 1, 1)
allAnnMapRect = MKMapRectUnion(allAnnMapRect, thisAnnMapRect)
}
//Set inset (blank space around all annotations) as needed...
//These numbers are in screen CGPoints...
let edgeInset = UIEdgeInsetsMake(20, 20, 20, 20)
self.mapView.setVisibleMapRect(allAnnMapRect, edgePadding: edgeInset, animated: true)
我在解析中有几个位置正在查询。它显示所有注释,但只缩放最后一个。我怎样才能找到最大和最小纬度和经度并使它们合适?
Whosebug 上有很多这些,但它们几乎都在 objective-c。
Objective-C 中的示例基本上仍然有效,因为基础 SDK/API 仍然相同——只是使用不同的语言调用(并且始终有文档)。
要显示所有注释,基本上有两种方法:
使用方便的
showAnnotations
方法。你传递给它一个注释数组,它会自动计算出一个合理的区域来显示。在添加所有注释后调用它(在for
循环之后)。事实上,如果注释不在地图上,showAnnotations
甚至会自行添加注释。要显示地图上已有的所有注释,只需将地图自己的annotations
数组传递给它即可。示例:self.mapView.showAnnotations(self.mapView.annotations, animated: true)
如果您对
showAnnotations
计算出的默认区域不满意,您可以自己计算一个。而不是计算 minimum/maximum 纬度和经度等,我更喜欢使用内置的MKMapRectUnion
函数来创建一个适合所有注释的MKMapRect
然后调用setVisibleMapRect(mapRect,edgePadding,animated)
让一种方便地在拟合地图矩形周围的屏幕点中定义填充。这种技术最初是在 Apple 的一个非常早期的地图视图示例应用程序中发现的。示例:var allAnnMapRect = MKMapRectNull for object in objects! { //existing code that creates annotation... //existing code that calls addAnnotation... let thisAnnMapPoint = MKMapPointForCoordinate(annotation.coordinate) let thisAnnMapRect = MKMapRectMake(thisAnnMapPoint.x, thisAnnMapPoint.y, 1, 1) allAnnMapRect = MKMapRectUnion(allAnnMapRect, thisAnnMapRect) } //Set inset (blank space around all annotations) as needed... //These numbers are in screen CGPoints... let edgeInset = UIEdgeInsetsMake(20, 20, 20, 20) self.mapView.setVisibleMapRect(allAnnMapRect, edgePadding: edgeInset, animated: true)