为什么MKMapView没有显示当前位置的红色引脚?

时间:2013-07-19 09:41:04

标签: ios objective-c mkmapview

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

self.mapView.showsUserLocation = YES;

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

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

3 个答案:

答案 0 :(得分:3)

为当前位置调用

mapView:viewForAnnotation:

From the docs

  

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

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

如果没有被召唤,还会有其他事情发生。

答案 1 :(得分:1)

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

if([a isKindOfClass:[MKUserLocation class]])
   return;

答案 2 :(得分:0)

也许你每次都会返回一个空针,所以即使你应该返回用户位置的注释,你也会返回这个空针。在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
}

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