【问题标题】:MKMapView not updating user position imageMKMapView 不更新用户位置图像
【发布时间】:2011-09-18 07:01:56
【问题描述】:

我的 MKMapView 会在启动时显示我的位置,但图像永远不会“跟随”我。位置更新,屏幕跟随我,但原始的“用户位置”图像留在后面。

这里是一些代码sn-ps:

-(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];,这确实有效。

所以基本上在某个地方我忽略了更新我的位置,或者我最有可能为我的当前位置绘制新图像的位置。

谁能看到我在那里遗漏了什么或做错了什么,因为它没有关注我的位置更新?

谢谢。

【问题讨论】:

  • 问题解决了吗?我有一个完全相同的。
  • 抱歉,不记得了 - 发生的时间太长了

标签: iphone ios location mkmapview


【解决方案1】:

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

【讨论】:

  • 谢谢!看起来它现在可以工作了。您的解决方案是我怀疑我应该做但不知道如何做的。测试后将标记为正确。
  • @Anna,这个解决方案不能解决问题。图像仍被绘制,视图跟随位置,但图像仍保留在其原始位置。
  • 是否从 CLLocationManager 的 didUpdateToLocation 委托方法调用 locationUpdate?您在地图视图的 didUpdateUserLocation 委托方法中是否还有任何代码?你能检查一下 CLLocationManager 的当前位置坐标是否与地图视图的 userLocation 匹配吗?另外,如果您点击地图上的 userLocation 注释(没有移动的注释),它会显示“当前位置”吗?另一件要检查的事情:在 viewForAnnotation 的顶部,检查注解是否为 MKUserLocation 类型,在这种情况下返回 nil,看看蓝点是否跟随你。
  • 您的基本方法应该有效,我在显示的代码中看不到任何明显的问题。最后,由于无论如何您都在使用自己的图像作为当前位置,因此您始终可以将 showsUserLocation 设置为 NO 并手动为当前位置添加和移动您自己的注释(它必须使用实现 setCoordinate 的类,以便您可以更新locationUpdate 中的坐标)。
  • 我也遇到了同样的问题。由于某些奇怪的原因,似乎 MKUserLocation 没有更新。最好的选择是确实不显示任何内容并创建自己的 Annotation 和 AnnotationView。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 2013-01-03
  • 2016-08-22
  • 1970-01-01
  • 2011-08-16
  • 2011-09-11
相关资源
最近更新 更多