2017-09-21 7 views
1

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]; 
} 

が、それはこの結果を示しています。

Can any one suggest me how can I get complete route and pin also in map's boundary

答えて

1

これは

-(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]; 
} 
+0

おかげPrateek :)を動作するはずです。 1行だけ私のために働く。エッジインセットを設定する目的は何ですか?また、マップビュー上のすべての注釈に対して機能しますか?私はエッジパディング(40,10,20,10)の値を変更しました。 – Chandni

+0

エッジインセットは、必要な場合に備えて、画面の端からパディングを設定するだけです。 Olaやuberのように、キャブのカードが下から表示されるので、あなたのルートや注釈がその下に隠れないようにパディングが必要になります。それがあなたのために働いて聞いてうれしい:) –

関連する問題