我有一个全屏幕地图,我想缩放到所有注释在地图上可见的级别,但只能在应用程序的内容区域中显示,如此图像所示:
正如您所看到的,地图会填满整个屏幕,但是,顶部和底部覆盖着覆盖地图的矩形。内容区域是亮绿色的部分。给定一系列注释,我希望能够缩放地图,使所有内容都在绿色内容区域内可见,而不是在地图的实际框架内。
我在这里使用这个(类别)方法,它执行缩放的默认任务以适合地图的框架。但是我不知道如何修改它只考虑内容区域:
- (void)zoomToShowAnnotations:(NSArray *)annotations extraPaddingMultiplier:(CGFloat)multiplier
{
CLLocationCoordinate2D topLeftCoord;
topLeftCoord.latitude = -90;
topLeftCoord.longitude = 180;
CLLocationCoordinate2D bottomRightCoord;
bottomRightCoord.latitude = 90;
bottomRightCoord.longitude = -180;
for(id<MKAnnotation> annotation in annotations)
{
topLeftCoord.longitude = fmin(topLeftCoord.longitude, annotation.coordinate.longitude);
topLeftCoord.latitude = fmax(topLeftCoord.latitude, annotation.coordinate.latitude);
bottomRightCoord.longitude = fmax(bottomRightCoord.longitude, annotation.coordinate.longitude);
bottomRightCoord.latitude = fmin(bottomRightCoord.latitude, annotation.coordinate.latitude);
}
MKCoordinateRegion region;
region.center.latitude = topLeftCoord.latitude - (topLeftCoord.latitude - bottomRightCoord.latitude) * 0.5;
region.center.longitude = topLeftCoord.longitude + (bottomRightCoord.longitude - topLeftCoord.longitude) * 0.5;
region.span.latitudeDelta = fabs(topLeftCoord.latitude - bottomRightCoord.latitude) * (multiplier != 0 ? multiplier : 1); // Add a little extra space on the sides
region.span.longitudeDelta = fabs(bottomRightCoord.longitude - topLeftCoord.longitude) * (multiplier != 0 ? multiplier : 1); // Add a little extra space on the sides
[self setRegion:region animated:YES];
}
答案 0 :(得分:3)
根据文件记载,这种方法应该适合这项工作。
// Position the map such that the provided array of annotations are all visible to the fullest extent possible.
@available(iOS 7.0, *)
open func showAnnotations(_ annotations: [MKAnnotation], animated: Bool)
你必须设置一个注释数组并将其放在像这样的函数中
let annotation = MKPointAnnotation()
annotation.coordinate = CLLocationCoordinate2D(latitude: 11.12, longitude: 12.11)
mapView.addAnnotation(annotation)
mapView.showAnnotations([annotation], animated: true)
答案 1 :(得分:1)
这只是一个步骤列表,没有实际代码或任何内容。