MKMapView 不更新用户位置图像
Posted
技术标签:
【中文标题】MKMapView 不更新用户位置图像【英文标题】:MKMapView not updating user position image 【发布时间】: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];
,这确实有效。
所以基本上在某个地方我忽略了更新我的位置,或者我最有可能为我的当前位置绘制新图像的位置。
谁能看到我在那里遗漏了什么或做错了什么,因为它没有关注我的位置更新?
谢谢。
【问题讨论】:
问题解决了吗?我有一个完全相同的。 抱歉,不记得了 - 发生的时间太长了 【参考方案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。以上是关于MKMapView 不更新用户位置图像的主要内容,如果未能解决你的问题,请参考以下文章
在 MKMapView Objective c 中手动更改用户的当前位置