Domanda

Nella mia app uso questo codice per ingrandire la mia mappa in cui il mio marcatore è posizionato:

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

}

funziona bene in iOS 6 ma non in iOS 7, sai perché? Grazie

È stato utile?

Soluzione

Questo codice si basa su sequenze di chiamate delegate molto specifiche.

Il count++ implica che presuppone il didAddAnnotationViews Il metodo delegato verrà chiamato immediatamente e separatamente dopo l'aggiunta di ogni annotazione.

Questa è un presupposto non sicuro indipendentemente dalla versione iOS.

Dal momento che questo codice di zoom non si basa sull'annotazione visualizzazioni per fare lo zoom (ha solo bisogno dell'annotazione Modelli -- cioè. il id<MKAnnotation> oggetti), non deve essere dentro didAddAnnotationViews innanzitutto.

Basta mettere il codice di zoom (la parte all'interno del if blocco), subito dopo il codice che aggiunge le annotazioni (presumibilmente dopo un for Loop che passa attraverso arrayResults). Questo dovrebbe funzionare in qualsiasi versione iOS.


Nota anche che in iOS 7, il nuovo ShowAnnotations: Animated: Il metodo rende non necessario questa mappa manuale. In iOS 7, puoi solo fare:

[mapView showAnnotations:mapView.annotations animated:YES];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top