8

Ho caricato l'immagine di annotazione personalizzata per la posizione corrente dell'utente. Sto aggiornando la posizione dell'utente corrente ogni 1 secondo in background.Smooth Spostamento dell'immagine di annotazione su Mapview

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
[self performSelectorOnMainThread:@selector(tempupdate) withObject:nil waitUntilDone:NO]; 
[pool release]; 

-(void)tempupdate 
{ 
    NSLog(@"callToLocationManager"); 
    mylocationManager = [[CLLocationManager alloc]init]; 
    NSLog(@"locationManagerM = %@",mylocationManager); 
    mylocationManager.delegate = self; 
    mylocationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    mylocationManager.distanceFilter = 500; 
    [mylocationManager startUpdatingLocation]; 
} 

Dopo aver aggiornato il latutude, longitudine sto aggiornando la mappa utilizzando seguente codice

MKCoordinateRegion region; 
MKCoordinateSpan span; 
span.latitudeDelta=0.002; 
span.longitudeDelta=0.002; 
CLLocationCoordinate2D location; 
location.latitude=[lat doubleValue]; 
location.longitude=[longt doubleValue]; 
region.span=span; 
region.center=location; 
addAnnotation=[[AddressAnnotation alloc]initWithCoordinate:location]; 
[email protected]"You are here"; 
[self.mapView removeAnnotations:self.mapView.annotations]; 
[self.mapView addAnnotation:addAnnotation]; 
[self.mapView setRegion:region animated:TRUE]; 
[self.mapView regionThatFits:region]; 

ma ogni volta che lampeggia annotazione immagine personalizzato prima di aggiungere al map.How per evitare questo effetto sfarfallio?

risposta

3

Non l'ho ancora provato, ma basandomi su una rapida occhiata al codice, direi che il problema si trova nella rimozione dell'annotazione e quindi nell'aggiunta di una nuova.

Hai provato a modificare le proprietà dell'annotazione già allegata?

NSArray* curAnnotations = [mapView annotations]; 
AddressAnnotation* aa = [curAnnotations lastObject]; // I am assuming you only have 1 annotation 
aa.mTitle = @"You are here"; // or don't do this if it never changes 
[aa setCoordinate:location]; 

Nota: di Apple Docs specificamente chiamare il metodo 'setCoordinate' come qualcosa che deve essere utilizzato per supportare gli aggiornamenti trascinamento o frequenti.

+0

so che problema sta nella rimozione e l'aggiunta di annotazioni sulla mappa-vista, ma c'è qualche altro modo per fare questo? Può dirmi in dettaglio che cosa devo fare? –

+0

Modificato la mia risposta con il codice di esempio – MobileVet

+0

Hey, grazie per la reply.but non funziona. Tuttavia mi dà ancora un effetto simile. –

1

non è necessario rimuovere le annotazioni dalla mappa. Invece, modifica la coordinata di annotazione nel blocco UIView beginAnimations-commitAnimations;

Si sarà simile a questo:

[UIView beginAnimations:@"yourAnimationName" context:nil]; 
[UIView setAnimationDuration:1.0]; 
[yourAnnotation setCoordinate:yourNewCoordinate]; 
[UIView commitAnimations]; 

Sarà muoversi agevolmente l'annotazione.

BR, Marcin Szulc

+0

Ha funzionato per me, grazie mille! – FreeNickname

+0

in swift 3 Ho fatto questo e ha funzionato: – rara

0
//SWIFT 3 
UIView.beginAnimations("yourname", context: nil) 
UIView.setAnimationDuration(1.0) 
yourpin.coordinate = MKCoordinateForMapPoint(mycoordinate) 
UIView.commitAnimations() 
Problemi correlati