MKMapView не обновляет изображение позиции пользователя - PullRequest
4 голосов
/ 20 июня 2011

Мой MKMapView показывает мою позицию при запуске, но затем изображение никогда не «следует» за мной. Местоположение обновляется, и экран следует за мной, но исходное изображение «Местоположение пользователя» остается позади.

Вот некоторые фрагменты кода:

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    static NSString* AnnotationIdentifier = @"Annotation";
    MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationIdentifier];
    if(!pinView)
    {
        MKPinAnnotationView *customPinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier] autorelease];

        if(annotation == mapView.userLocation) customPinView.image = [self rotate:[UIImage imageNamed:@"myCar.png"] orientation:UIImageOrientationUp];
        else customPinView.image = [UIImage imageNamed:@"randomPin.png"];

        customPinView.animatesDrop = NO;
        customPinView.canShowCallout = YES;
        return customPinView;
    }
    else
    {
        pinView.annotation = annotation;
    }
    return pinView;
}

-(void)locationUpdate:(CLLocation *)location
{
    CLLocationCoordinate2D loc = [location coordinate];
    if(isFollowing)
        [myMapView setCenterCoordinate:loc];//Works
}

и в моем viewDidLoad я звоню: [myMapView setShowsUserLocation:YES];, который работает.

Так что в основном где-то я пренебрегаю обновлением своей позиции или, скорее всего, где я рисую новое изображение для моей текущей позиции.

Может ли кто-нибудь увидеть, что я пропустил или что-то не так сделал, чтобы он не следил за обновлениями моего местоположения?

Спасибо.

1 Ответ

3 голосов
/ 20 июня 2011

Непонятно, если это проблема, но метод viewForAnnotation выглядит неправильно.

Изображение аннотации устанавливается только при создании представления аннотации. Если представление используется повторно, обновляется свойство аннотации, но не изображение. Возможно, что повторно используемый вид предназначен для аннотации другого типа, требующей другого изображения.

Метод должен выглядеть примерно так:

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    static NSString* AnnotationIdentifier = @"Annotation";
    MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationIdentifier];
    if (!pinView)
    {
        pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier] autorelease];               
        pinView.animatesDrop = NO;
        pinView.canShowCallout = YES;
    }
    else
    {
        pinView.annotation = annotation;
    }

    if (annotation == mapView.userLocation) 
        pinView.image = [self rotate:[UIImage imageNamed:@"myCar.png"] orientation:UIImageOrientationUp];
    else 
        pinView.image = [UIImage imageNamed:@"randomPin.png"];

    return pinView;
}
...