2012-05-01 18 views
9

Sono nuovo di mapkit in ogg-c. Sono in grado di aggiungere annotazioni personalizzate in mapview.come aggiungere la visualizzazione personalizzata del callout in mapview

ho bisogno di mettere vista di dettaglio personalizzato come sotto immagine

like this.

Ma non ho capito come posso progettare la vista del callout in questo modo.

so che ho bisogno di aggiungere callout in vista per il metodo di annotazione.

- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    static NSString *AnnotationViewID = @"annotationViewID"; 

    MKAnnotationView *annotationView = (MKAnnotationView *)[mapview dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID]; 

    if (annotationView == nil) 
    { 
     annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID] autorelease]; 
    } 

    annotationView.image = [UIImage imageNamed:@"blue_without_pin.png"]; 
    annotationView.annotation = annotation; 


    return annotationView; 
} 
+0

http://shawnsbits.com/blog/2011/04/12/custom-map-pins-for-mapkit/..visit qui .. – Nit

+0

grazie per il replay nit, ma il link che hai postato non funziona, non mostra risultati –

+0

http://shawnsbits.com/blog/2010/12/23/mapkit-overlays-session-1-overlay-map/ – hanumanDev

risposta

0

Fondamentalmente ciò che si vuole fare è aggiungere una nuova visualizzazione personalizzata implementando il metodo seguente nell'istanza MKMapViewDelegate:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view { 
    CGPoint annotationCenter = [mapView convertCoordinate:view.annotation.coordinate toPointToView:mapView]; 
    [self displayCustomCalloutForAnnotation:view.annotation center:annotationCenter]; 
} 
0
@interface CustomAnnotaionView : MKAnnotationView 




@property (strong, nonatomic) UIView *calloutView; 




-(void)setSelected:(BOOL)selected animated:(BOOL)animated; 




@end 




@implementation CustomAnnotaionView 




@synthesize calloutView = _calloutView; 




-(void)setSelected:(BOOL)selected animated:(BOOL)animated 





{ 

    [super setSelected:selected animated:animated]; 

    if(selected) 
    { 

     [self.calloutView setFrame:CGRectMake(30, 130, 250, 135)]; 
     [self.calloutView sizeToFit]; 
     self.calloutView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"popup.png"]]; 
     [self addSubview:self.calloutView]; 

    } 
    else 
    { 

     [self.calloutView removeFromSuperview]; 
    } 

} 

-(void)didAddSubview:(UIView *)subview 
{ 

    if([[[subview class]description]isEqualToString:@"UICalloutView"]) 
    { 

     [subview removeFromSuperview]; 

    } 
} 

Use this customAnnotationView class in MapView delegate method, 

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id 

<MKAnnotation>)annotation 

{ 



    if([annotation isKindOfClass:[MapAnnotation class]]) 
    { 
     CustomAnnotationView *annotationView = (CustomAnnotaionView*)[theMapView dequeueReusableAnnotationViewWithIdentifier:@"CustomAnnotationView"]; 
     if(!annotationView) 
     { 
     MapAnnotation *annotation = (MapAnnotation *)annotation; 

     annotationView = [[CustomAnnotaionView alloc]initWithAnnotation:annotation reuseIdentifier:@"CustomAnnotationView"]; 

      [annotationView setCanShowCallout:YES]; 
     } 
     else 
      annotationView.annotation = annotation; 

     return annotationView; 

    } 
    return nil; 

} 
-3

È necessario implementare una didascalia visualizzare te stesso, e utilizzare

questo delegato per rendere visibile la vista del callout,

IOS non ha alcun metodo per vista di dettaglio personalizzato ancora

+1

In che cosa differisce dalla risposta di @ pnollet – Mark

0

Una soluzione per questo sarebbe di rilevare l'esatta coordinata dell'annotazione selezionato rispetto UIView genitore e poi disegnando un'UIView direttamente sulla parte superiore del MKMapView.

Ecco un frammento che potrebbe aiutare:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
{ 
    CGPoint pointInMap = [self.mapView convertCoordinate:buildingAnnotation.coordinate 
              toPointToView:self.view]; 

    // Hide the default callout generated by MKMapView 

    [mapView deselectAnnotation:view.annotation animated:NO]; 

    // Create a custom callout view and center the arrow on the pointInMap CGPoint 
} 
Problemi correlati