1

我有一个关于在我的 MKMapView 上设置区域的问题。

我需要将地图视图设置为在我的视图首次加载时显示特定区域。

该区域的东北和西南经纬度为:

North East Coordinate Lat:59.623724 Long:2.911587
South West Coordinate Lat:49.004833 Long:-11.361825

除此之外,我想将地图视图“锁定”到该区域。理想情况下,锁是透明的,即:上面的坐标代表 MKMapView 的最大范围。但是,如果只是检查东北和西南坐标的情况

- (void)mapView:(MKMapView *)aMapView regionDidChangeAnimated:(BOOL)animated 

如果它们超出我的最大范围,则重置视图,这对我来说也是可以接受的。

非常感谢您对此事的任何指示。

编辑:关于我问题的第一部分,我发现我可以使用以下代码在 MKMapView 上设置初始区域:

CLLocationCoordinate2D neCoord;
neCoord.latitude = 59.787643;
neCoord.longitude = 3.025857;

CLLocationCoordinate2D swCoord;
swCoord.latitude = 49.394171;
swCoord.longitude = -11.036642;
MKCoordinateRegion region;
region.center.latitude = neCoord.latitude - (neCoord.latitude - swCoord.latitude) * 0.5;
region.center.longitude = neCoord.longitude + (swCoord.longitude - neCoord.longitude) * 0.5;
region.span.latitudeDelta = fabs(neCoord.latitude - swCoord.latitude); // Add a little extra space on the sides
region.span.longitudeDelta = fabs(swCoord.longitude - neCoord.longitude); // Add a little extra space on the sides

region = [self.mapView regionThatFits:region];
[self.mapView setRegion:region animated:YES];
4

1 回答 1

0

首先,您需要确保在显示视图后在地图视图上设置区域。如果您在地图加载之前设置它,它可能不会以该区域为中心。完成此操作后,只需设置它self.mapView.zoomEnabled = NO;self.mapView.scrollEnabled = NO;它就会阻止用户移动地图。

如果您想锁定用户可以查看的最大范围但仍允许滚动和缩放,则如果用户离开,您将不得不使用-mapView:regionDidChangeAnimated:并将用户“撞”回您的范围内。请注意,这样做的用户体验可能会很糟糕——他们会四处移动,放手,然后地图会突然移回您定义的区域。如果他们离开您的边界,您可以尝试使用-mapView:regionWillChangeAnimated:和修改地图区域,这可能会不那么刺耳。

于 2013-09-06T14:29:42.717 回答