8

Aggiungo uno CABasicAnimation allo strato AnnotationView per simulare un'auto in movimento sulla mappa.Annotazione animata La vista scompare durante lo zoom della vista mappa?

Questo funziona perfettamente finché non tento di ingrandire o rimpicciolire la mappa quando è in corso l'animazione.

Ho trovato che la vista di annotazione di animazione scompare quando si ingrandisce il mapview !!

Immagino che questo possa essere causato dal fatto che il livello associato all'oggetto di animazione è stato rimosso durante lo zoom di mapview.

Cerco di risolvere questo problema arrestando l'animazione durante lo zoom. ma il risultato non è buono. L'auto sembra saltare al punto di destinazione.

Qualcuno ha idee a riguardo?

Qualcuno sa come rendere l'animazione ancora in esecuzione durante lo zoom della mappa?

+0

Avete fatto dei progressi su questo problema? Sto vivendo lo stesso problema e vorrei risolverlo. –

+0

@Hubert puoi pubblicare il tuo codice di annotazione in movimento? – Mubbashar

risposta

1

Non so come risolvere il problema a livello di codice, ma cosa succede se si memorizza la posizione della macchina (punto a) proprio quando l'utente inizia a zoomare, quando lo zoom è completo, calcolare la distanza tra la posizione corrente e la nuova posizione (punto b) e quindi animarlo dal punto a al punto b. In questo modo la macchina non avrebbe cucito per "saltare" al secondo punto di mira. Per renderlo un po 'più elaborato, avvia la velocità dell'auto al doppio della velocità normale e poi decelera fino a raggiungere la velocità normale man mano che ti avvicini al punto "B". Penso che questo farà sembrare meno un insetto e più simile a un effetto.

+0

Buone idee, ma ho davvero bisogno di una risposta con codice funzionante. Non so nemmeno come rilevare quando l'utente sta eseguendo lo zoom in MKMapView. – Felix

0

Penso che sia possibile utilizzare il metodo delegato mapView:regionDidChangeAnimated:. Ogni volta che l'utente scorre/zooma, verrà chiamato questo metodo. provaci una volta Potrebbe aiutarti.

1

ho risolto terminando tutte le animazioni di annotazione sulla 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]; 
    } 

    } 
}