【问题标题】:iphone blue dot AND pin at same time -iphone蓝点和针同时 -
【发布时间】:2011-05-05 15:47:30
【问题描述】:

请帮忙,这个问题已经被问过很多次了,但是人们的建议对我的结果没有影响,我想要的只是要在地图上显示的图钉和蓝色圆圈(准确度),这是我的实现. - 哦,我使用的是 iPhone 设备 - 我不在模拟器中

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{


NSLog(@"View for Annotation is called");

if (NSClassFromString(@"MKUserLocation")==[annotation class]) {
    return nil;
}

if (annotation == mapView.userLocation) {
    return nil;
}



MKPinAnnotationView *annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"currentloc"];

annView.pinColor = MKPinAnnotationColorGreen;
UIButton * btn = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
annView.rightCalloutAccessoryView = btn;
annView.animatesDrop=TRUE;

annView.canShowCallout = YES;
annView.calloutOffset = CGPointMake(-5, 5);
pinDropped = TRUE;
return annView;

}

提前欢呼……该死的东西

【问题讨论】:

  • 您是否将 mapView.showsUserLocation 设置为 YES?第二个if 没有意义,因为它只是检查注解是否与自身相同。
  • yes 设置所有需要设置的内容,删除第二个 if 语句.. 干杯
  • 正在显示什么?你得到别针了吗?还是你得到蓝点和圆圈?或者两者都不是?在不知道实际得到什么的情况下很难进行调试。
  • 如果我检查注释是否为 kindOfClass MKUserLocation,我只会得到蓝色圆圈,如果我忽略检查并直接创建一个 MKPinAnnotationView 对象 - 我得到了 pin,抱歉 - 应该这样做更清晰
  • 只是为了确认:您会在控制台上看到“调用注释视图”消息,对吧?您能显示将引脚添加到地图的代码的 addAnnotation 部分吗?上面的代码应该可以工作,但您只需要其中一个 if 语句。

标签: iphone mapkit core-location


【解决方案1】:

如果您使用的是模拟器,那么您可能会遇到 CoreLocation 和 MapKit 计算您当前位置的方式不为人知的差异。

在模拟器中

CoreLocation始终使用位于美国加利福尼亚州库比蒂诺的 Apple 总部作为您当前的位置。这是蓝点将始终出现在地图上的位置。

MapKit 将始终使用 Apple 的 IP 地址和 WiFi 热点信息数据库来近似您的实际当前位置。如果您告诉它使用您当前的位置,这就是地图的中心位置。

因此,地图将以您当前位置为中心,但蓝点将在库比蒂诺结束。

在 iOS 设备上

CoreLocation 将蓝点放在与您当前实际位置近似的位置上。

MapKit 以近似您当前实际位置的位置为中心。

因此,当您使用实际的 iOS 设备时,您会在地图中心看到蓝点。

 
这一点知识可以减轻很多压力。 :)

【讨论】:

  • 很久以前读过这个信息,也许我的问题应该说明我使用iPhone设备而不是模拟器来定位。我很清楚哪个 api 做了什么以及它显示/提供了什么信息 - 我之前已经显示了 pin 和蓝色近似圆。问题是,如何同时显示图钉和蓝色圆圈,而不是 mapkit / CL 如何获得我的位置,但感谢您提供的信息
  • @burrows111 人们有这个问题是一个非常普遍的原因,所以值得一试。请看一下我对您问题的澄清评论,上面。
  • 干杯马修 :) - 至少我们都排序了......这确实是一个普遍的问题,我知道我忽略了一些东西。快乐编码...@Matthew Frederick
【解决方案2】:

以防万一有人想知道,这也有效:

if ([annotation isKindOfClass:[MKUserLocation class]])
{
    return nil;
}

【讨论】:

    【解决方案3】:

    这适用于我的代码

    if(annotation == mapView.userLocation){
                return nil;
     }
    

    尝试一下并告诉我们

    【讨论】:

    • 那个也没有运气:( - 我显然忽略了一些东西。我在我的问题中显示了你的建议。谢谢
    【解决方案4】:

    确保已实现 [mapview addAnnotation:annotation];

    感谢安娜的提醒。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多