2012-11-28 12 views
7

come voglio implementare l'usanza chiamare nel mkmapview sto usando queste classi CalloutMapAnnotationView.h e CalloutMapAnnotationView.mChiamata personalizzata non visualizzata correttamente in ios6?

ho estratto queste classi dai seguenti link

https://github.com/asalom/Custom-Map-Annotation-Callouts/blob/master/Classes/CalloutMapAnnotationView.h

https://github.com/asalom/Custom-Map-Annotation-Callouts/blob/master/Classes/CalloutMapAnnotationView.m

Questi funzionano bene in ios5 ma in iOS6 quando faccio clic sulla chiamata la vista della mappa è in movimento e la chiamata non viene visualizzata correttamente come mostrato nelle figure seguenti mentre stavo zoomando anche la sua n ot giuntamente ho provato diversi modi per sbarazzarmi di questo problema controllando la versione di os e ho provato a cambiare alcuni dei metodi nelle classi ma di non usare.

Dopo l'implementazione di questi guarda la mappa iOS5 proveniente simili enter image description here

In iOS6 Questo non venire correttamente come come in iOS5. ad esempio enter image description here

risposta

5

Anche io ho affrontato lo stesso problema in iOS 6 utilizzando queste classi. Questi cambiamenti hanno lavorato per me:

1) Variazione di questo metodo:

Questo metodo si implementare nella vostra cartina classe

(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView*)view 

come ordine di linee seguenti

self.selectedAnnotationView = view; 

[self.mapView addAnnotation:self.calloutAnnotation]; 

2) Nel file CalloutMapAnnotationView.m

- (void)adjustMapRegionIfNeeded in this method first 5 lines like bellow 

    CGFloat xPixelShift = 0; 

    if ([self relativeParentXPosition] < 38) { 

     xPixelShift = 38 - [self relativeParentXPosition]; 

    } else if ([self relativeParentXPosition] > self.frame.size.width - 38) { 

    xPixelShift = (self.frame.size.width - 38) - [self relativeParentXPosition]; 

    } 

3) Nella stessa classe CalloutMapAnnotationView.m - (void)drawRect:(CGRect)rect in questo metodo dopo CGFloat parentX = [self relativeParentXPosition];

linea e sopra rect = self.bounds; questa linea aggiuntivi seguenti linee

if ([self relativeParentXPosition] < 38) { 

     parentX = 38; 

    } else if ([self relativeParentXPosition] > self.mapView.frame.size.width - 38) { 

     parentX = [self relativeParentXPosition]-25; 

    } 

4) Nella stessa CalloutMapAnnotationView.m classe.

- (void)didMoveToSuperview { 
     [super didMoveToSuperview]; 
     [self.superview bringSubviewToFront:self]; 
    } 

È possibile utilizzare direttamente le classi di cui sopra e li usa funzionano bene in entrambi iOS 5 & iOS 6. Si dovrebbe apportare le modifiche necessarie in base alle proprie esigenze.

+0

Grazie, questa soluzione mi ha aiutato. –

+0

ottima risposta è davvero d'aiuto. Grazie amico. –

+0

ciao ios rider – 08442

-2

solo è possibile aggiungere titolo e sottotitolo nsstring come quello e _name è il titolo che si desidera.

- (NSString *)title { 
    return _name; 
} 
- (NSString *)subtitle { 
    return [NSString stringWithFormat:@"%f, %f", _coordinate.latitude, _coordinate.longitude]; 
} 
+0

questo non è quello che viene chiesto a tutti –

Problemi correlati