2012-11-28 18 views
7

, wie ich will Brauch ruft in der MKMapView implementieren ich diese Klassen verwenden CalloutMapAnnotationView.h und CalloutMapAnnotationView.mBenutzerdefinierte CallOut nicht korrekt in ios6 angezeigt?

ich diese Klassen aus den folgenden Links extrahiert habe

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

Diese funktionieren gut in ios5, aber in ios6, wenn ich auf den Anruf klicke, bewegt sich die Kartenansicht und der Anruf wird nicht richtig angezeigt, wie in den folgenden Abbildungen gezeigt, während ich zoomte auch seine n Wenn ich richtig komme, habe ich mehrere Möglichkeiten ausprobiert, dieses Problem zu lösen, indem ich die Version von os überprüft habe und versucht habe, einige der Methoden in den Klassen zu ändern, aber nicht zu verwenden.

Nachdem diese in ios5 Kartenansicht Umsetzung wie kommt diese enter image description here

In iOS6 Dieses nicht richtig, wie wie in ios5 kommen. zum Beispiel enter image description here

Antwort

5

Ich habe auch das gleiche Problem in iOS 6 mit diesen Klassen konfrontiert. Diese Veränderungen arbeitete für mich:

1) Veränderung in dieser Methode:

Diese Methode, die Sie in Ihrer Kartenansicht Klasse implementieren wird

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

wie folgende Reihenfolge der Linien

self.selectedAnnotationView = view; 

[self.mapView addAnnotation:self.calloutAnnotation]; 

2) In CalloutMapAnnotationView.m Datei

- (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) In derselben Klasse CalloutMapAnnotationView.m - (void)drawRect:(CGRect)rect in diesem Verfahren nach dem CGFloat parentX = [self relativeParentXPosition];

Linie und oberhalb rect = self.bounds; diese Zeile add folgenden Zeilen

if ([self relativeParentXPosition] < 38) { 

     parentX = 38; 

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

     parentX = [self relativeParentXPosition]-25; 

    } 

4) In derselben Klasse CalloutMapAnnotationView.m.

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

können Sie verwenden, um direkt die oben genannten Klassen und nutzen sie sie in beiden iOS funktionieren 5 & iOS 6. Sie sollten Ihren Anforderungen entsprechend notwendigen Änderungen vornehmen.

+0

Danke, diese Lösung hat mir auch geholfen. –

+0

große Antwort es ist wirklich geholfen. Danke, Alter. –

+0

hallo ios rider – 08442

-2

nur du kannst nsstring title und nstring Untertitel so hinzufügen und _name ist was du willst.

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

das wird überhaupt nicht gefragt –

Verwandte Themen