8

Ich füge der Ebene AnnotationView eine CABasicAnimation hinzu, um ein Auto zu simulieren, das sich auf der Kartenansicht bewegt.Animated AnnotationView verschwindet während des Zoomens der Kartenansicht?

Das funktioniert gut, bis ich versuche, die Kartenansicht zu vergrößern oder zu verkleinern, wenn die Animation läuft.

Ich fand die Animation Anmerkungsansicht verschwindet beim Zoomen der Mapview !!

Ich vermute, dies kann daran liegen, dass der Layer, dem das Animationsobjekt zugeordnet wurde, beim Zoomen von Mapview entfernt wurde.

Ich versuche, dies zu lösen, indem Sie die Animation beim Zoomen stoppen. aber das Ergebnis ist nicht gut. Das Auto scheint zum Zielpunkt zu springen.

Hat jemand Ideen dazu?

Wer weiß, wie die Animation beim Zoomen der Kartenansicht noch läuft?

+0

Haben Sie zu diesem Problem keine Fortschritte machen? Ich habe das gleiche Problem und möchte es lösen. –

+0

@Hubert können Sie Ihren Code der beweglichen Anmerkung bekannt geben? – Mubbashar

Antwort

1

Ich weiß nicht, wie Sie Ihr Problem programmgesteuert lösen, aber was ist, wenn die Autos Position speichern (Punkt a) rechts, wenn der Benutzer zu Zoomen beginnt, wenn der Zoom abgeschlossen ist, berechnen Sie den Abstand zwischen der aktuellen Position und dem neuen Position (Punkt b) und animiere sie dann von Punkt a nach Punkt b. Auf diese Weise würde das Auto nicht zum nächsten Zielpunkt "springen". Um es etwas zarter zu machen, starten Sie die Geschwindigkeit des Autos mit der doppelten Geschwindigkeit und verlangsamen Sie dann auf normale Geschwindigkeit, wenn Sie sich dem Punkt "B" nähern. Ich denke, dadurch wird es weniger wie ein Käfer aussehen und eher wie ein Effekt.

+0

Gute Ideen, aber ich brauche wirklich eine Antwort mit Arbeitscode. Ich weiß nicht einmal, wie ich feststellen kann, wenn der Benutzer die MKMapView vergrößert. – Felix

0

Ich denke, Sie können von der Delegiertenmethode mapView:regionDidChangeAnimated: verwenden. Jedes Mal, wenn der Benutzer scrollt/zoomt, wird diese Methode aufgerufen. versuche es einfach einmal. Es kann dir helfen.

1

Ich löste es durch das Beenden alle Annotation-Animationen auf regionWillChangeAnimated: -

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated 
{ 

    for (int i=0;i< [mapView.annotations count];i++) 
    { 
    id annotation = [mapView.annotations objectAtIndex:i]; 

    MKAnnotationView* annView =[mapView viewForAnnotation: annotation]; 
    if (annView != nil) 
    { 

     CALayer* layer = annView.layer; 
     [layer removeAllAnimations]; 
    } 

    } 
} 
Verwandte Themen