Плавное движение аннотации изображения на MapView - PullRequest
8 голосов
/ 13 марта 2012

Я загрузил пользовательское изображение аннотации для текущего местоположения пользователя. Я обновляю текущее местоположение пользователя через каждые 1 секунду в фоновом режиме.

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

После обновления текущей широты и долготы я обновляю карту, используя следующий код

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];
addAnnotation.mTitle=@"You are here";
[self.mapView removeAnnotations:self.mapView.annotations];
[self.mapView addAnnotation:addAnnotation];
[self.mapView setRegion:region animated:TRUE];
[self.mapView regionThatFits:region];

Но каждый раз, когда пользовательское изображение аннотации мигает перед добавлением на карту. Как избежать этого эффекта мерцания?

Ответы [ 3 ]

3 голосов
/ 14 марта 2012

Я еще не проверял это, но на основании быстрого взгляда на ваш код, я думаю, проблема заключается в том, что вы удалили аннотацию, а затем добавили новую.

Вы пробовали только чторедактирование уже прикрепленных свойств аннотации?

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

Примечание: Документы Apple специально вызывают метод 'setCoordinate' как нечто, что должно использоваться для поддержки перетаскивания или частых обновлений.

1 голос
/ 06 апреля 2012

Вы не должны удалять аннотации с карты.Вместо этого измените координату аннотации в блоке UIView beginAnimations-commitAnimations;

Это будет выглядеть примерно так:

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

Это будет плавно перемещать аннотацию.

BR,Марчин Шульц

0 голосов
/ 26 января 2017
//SWIFT 3
UIView.beginAnimations("yourname", context: nil)
UIView.setAnimationDuration(1.0)
yourpin.coordinate = MKCoordinateForMapPoint(mycoordinate)
UIView.commitAnimations()
...