gpt4 book ai didi

iOS - 每本地图 View 发生变化(滚动、缩放)时,Mapkit 都会保持动画用户位置

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:10:20 24 4
gpt4 key购买 nike

我正在使用 CLLocationManager 的坐标在 map 上显示用户的位置。每次我移动或缩放 map 时,用户位置图钉(具有声纳效果的蓝色图钉)不断消失,然后重新动画回到 map 上。 (我指的不是声纳动画效果。蓝点从字面上消失,然后重新激活)。

本地图滚动/缩放时,我没有调用任何其他方法。使用断点,在map的delegate方法中只调用return nil:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
//User's Pin
if([annotation class] == MKUserLocation.class) {
return nil;
}

....rest of my code here, nothing else is called as I am only plotting user at this time...
}

最佳答案

在我最初的回答中,我认为目标是用 showUserLocation = YES 替换使用 MKMapView 时出现的闪烁蓝点userTrackingMode = MKUserTrackingModeFollow。因此,我展示了如何用图像或标准图钉替换它。

但事实证明,问题不在于有一个显示当前位置的蓝点,而是它的动画被打断,并且随着用户在 map 上平移和缩放而出现和消失。

如果您调用 removeAnnotations 并删除所有注释(包括系统生成的 MKUserLocation 注释),我已经看到了这种行为。如果您关闭 showUserLocation 并重新打开它,我也看到了这种行为。

OP 指出这些情况都不适用,但对于 future 的读者来说,这些是可能导致此行为的一些注意事项。


原答案:

最简单的答案是确保您的 Controller 是MKMapViewdelegate,然后定义一个检测viewForAnnotation >MKUserLocation,并用任何你想要的替换注释 View 。例如,如果您想要显示一张@"user.png" 图像,它可能如下所示:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[MKUserLocation class]])
{
NSString *annotationIdentifier = @"userlocation";
MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];
if (annotationView)
{
annotationView.annotation = annotation;
}
else
{
annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annotationIdentifier];
annotationView.image = [UIImage imageNamed:@"user.png"];
}

return annotationView;
}

// again, if you had other annotation types, such as MKPointAnnotation,
// handle them here

if ([annotation isKindOfClass:[MKPointAnnotation class]])
{
...
}

return nil;
}

或者,如果你想显示一个标准的 pin,你可以:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[MKUserLocation class]])
{
if ([annotation isKindOfClass:[MKUserLocation class]])
{
NSString *annotationIdentifier = @"userlocation";
MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];
if (annotationView)
{
annotationView.annotation = annotation;
}
else
{
annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annotationIdentifier];
}

return annotationView;
}
}

// again, if you had other annotation types, such as MKPointAnnotation,
// handle them here

if ([annotation isKindOfClass:[MKPointAnnotation class]])
{
...
}

return nil;
}

关于iOS - 每本地图 View 发生变化(滚动、缩放)时,Mapkit 都会保持动画用户位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16311472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com