Frage

In meiner App verwende ich diesen Code, um in meiner Karte zu zoomen, wo mein Marker positioniert ist:

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {

    count++;

    if (count == arrayResults.count){

        MKMapRect zoomRect = MKMapRectNull;
        for (id <MKAnnotation> annotation in mapView.annotations)
        {
            MKMapPoint annotationP = MKMapPointForCoordinate(annotation.coordinate);
            MKMapRect pointRect = MKMapRectMake(annotationP.x, annotationP.y, 0.1, 0.1);
            if (MKMapRectIsNull(zoomRect)) {
                zoomRect = pointRect;
            } else {
                zoomRect = MKMapRectUnion(zoomRect, pointRect);
            }
        }
        [mapView setVisibleMapRect:zoomRect animated:YES];
    }

}

Diese Arbeit in iOS 6, aber nicht in iOS 7, weißt du warum? Danke

War es hilfreich?

Lösung

Dieser Code basiert auf sehr spezifischen Delegierten -Aufrufsequenzen.

Das count++ impliziert es nimmt das an didAddAnnotationViews Die Delegate -Methode wird sofort und getrennt aufgerufen, nachdem jede Annotation hinzugefügt wurde.

Dies ist eine unsichere Annahme unabhängig von der iOS -Version.

Da dieser Zoomcode nicht auf die Annotation beruht Ansichten Um das Zoomen zu machen (es braucht nur die Annotation Modelle - dh. das id<MKAnnotation> Objekte), es muss nicht in sein didAddAnnotationViews an erster Stelle.

Setzen Sie einfach den Zoomcode ein (das Teil in die if Block), direkt nach dem Code, der die Anmerkungen hinzufügt (vermutlich nach a for Schleife, die durchgeht arrayResults). Das sollte in jeder iOS -Version funktionieren.


Beachten Sie auch, dass in iOS 7 der neue Showannotationen: Animated: Die Methode macht diese manuelle Karte rechte Konstruktion unnötig. In iOS 7 können Sie einfach:

[mapView showAnnotations:mapView.annotations animated:YES];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top