mkmapview显示指定框架中的路线和注释
问题描述:
我使用下面的方法显示mkmapview中的注释和路线,但它仅显示mkmapview中的注释,并未在地图视图的边界中显示完整路线 任何人都可以提出我需要哪些修改为了正确显示一切。mkmapview显示指定框架中的路线和注释
由于
- (void)zoomAnnotationsOnMapView:(MKMapView *)mapView toFrame:(CGRect)annotationsFrame animated:(BOOL)animated
{
NSArray *annotations = mapView.annotations;
int count = (int)[mapView.annotations count];
if (count == 0) { return; } //bail if no annotations
//convert NSArray of id <MKAnnotation> into an MKCoordinateRegion that can be used to set the map size
//can't use NSArray with MKMapPoint because MKMapPoint is not an id
MKMapPoint points[count]; //C array of MKMapPoint struct
for(int i=0; i<count; i++) //load points C array by converting coordinates to points
{
CLLocationCoordinate2D coordinate = [(id <MKAnnotation>)[annotations objectAtIndex:i] coordinate];
points[i] = MKMapPointForCoordinate(coordinate);
}
//create MKMapRect from array of MKMapPoint
MKMapRect mapRect = [[MKPolygon polygonWithPoints:points count:count] boundingMapRect];
//convert MKCoordinateRegion from MKMapRect
MKCoordinateRegion region = MKCoordinateRegionForMapRect(mapRect);
//add padding so pins aren't scrunched on the edges
region.span.latitudeDelta *= ANNOTATION_REGION_PAD_FACTOR;
region.span.longitudeDelta *= ANNOTATION_REGION_PAD_FACTOR;
//but padding can't be bigger than the world
if(region.span.latitudeDelta > MAX_DEGREES_ARC) {
region.span.latitudeDelta = MAX_DEGREES_ARC;
}
if(region.span.longitudeDelta > MAX_DEGREES_ARC){
region.span.longitudeDelta = MAX_DEGREES_ARC;
}
//and don't zoom in stupid-close on small samples
if(region.span.latitudeDelta < MINIMUM_ZOOM_ARC) { region.span.latitudeDelta = MINIMUM_ZOOM_ARC; }
if(region.span.longitudeDelta < MINIMUM_ZOOM_ARC) { region.span.longitudeDelta = MINIMUM_ZOOM_ARC; }
//and if there is a sample of 1 we want the max zoom-in instead of max zoom-out
if(count == 1)
{
region.span.latitudeDelta = MINIMUM_ZOOM_ARC;
region.span.longitudeDelta = MINIMUM_ZOOM_ARC;
}
[mapView setRegion:region animated:animated];
[mapView setVisibleMapRect:mapRect edgePadding:UIEdgeInsetsMake(120, 120, 150, 80) animated:YES];
// [MBProgressHUD hideAllHUDsForView:self.view animated:YES];
}
当我施加它,它示出了该结果。
答
这应该工作
-(void)zoomToDisplayPolyline:(MKMapView*)mapView polyline:(MKPolyline*)polyline animated:(BOOL)animated
{
[mapView setVisibleMapRect:[polyline boundingMapRect] edgePadding:UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0) animated:animated];
}
感谢Prateek :)。只有1行它适用于我。设置边缘插入的目的是什么,并使其适用于地图视图上的所有注释。因为我改变了边缘填充的值(40,10,20,10)。 – Chandni
Edgeinset只是设置屏幕边缘的任何填充,以防您需要。就像在Ola或者超级卡车卡片从底部出现,所以在这种情况下,您需要填充以便您的路线或注释不会隐藏在它下面。很高兴听到它为你工作:) –