2

MapView 正在显示我当前的位置,但没有出现红色图钉(或蓝色圆圈)。此设备已启用定位服务。但是,红色引脚显示在模拟器上运行相同的代码。我已经设置了必需的属性:

self.mapView.showsUserLocation = YES;

我正在使用自定义引脚,但是,“mapView:viewForAnnotation:”只为每个自定义注释调用,所以看起来这个方法不是针对当前位置调用的,这就是它没有显示红色引脚的原因。但是,很奇怪为什么相同的代码在模拟器上正确运行。

更新刚刚用 mapView 创建了空的单视图项目。确实添加了 self.mapView.showsUserLocation = YES 但设备上没有显示当前位置。但是模拟器中显示了一个蓝色圆圈。我在我的 iPhone4 上使用 iOS 6.1.2。

4

3 回答 3

3

mapView:viewForAnnotation:为当前位置调用。

从文档

如果 annotation 参数中的对象是 MKUserLocation 类的实例,您可以提供自定义视图来表示用户的位置。要使用默认系统视图显示用户的位置,请返回 nil。

在该委托方法的实现中,检查传入的注释的类并相应地继续(返回 nil 以使用蓝点或返回自定义视图)。

如果它没有被调用,则其他事情正在进行中。

于 2013-07-19T09:50:08.893 回答
1

在 mapView:viewForAnnotation 方法中在其他代码之前添加

if([a isKindOfClass:[MKUserLocation class]])
   return;
于 2013-07-19T09:50:48.657 回答
0

也许您每次都返回一个空 pin,所以即使您应该返回用户位置的注释,您也返回这个空 pin。在你的 viewForAnnotation 委托中试试这个:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation
{
    // When returning nil, it should show the default blue dot
    if(annotation == mapView.userLocation) return nil;

    // Dequeue the annotations for actual points, do whatever, and return the correct pins
}

编辑:如果设备上没有调用您的委托方法,我的猜测可能是某处存在内存泄漏。在模拟器中,内存是您正在使用它的计算机的内存,但在设备上,这受到更多限制。

于 2013-07-19T10:18:08.217 回答