MKMapView不更新用户位置图像

时间:2011-06-19 20:15:44

标签: iphone ios location mkmapview

我的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 个答案:

答案 0 :(得分:3)

目前尚不清楚这是否是问题,但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;
}