- (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;
}
事先欢呼......血腥的事情答案 0 :(得分:1)
如果您正在使用模拟器,那么您可能会遇到CoreLocation和MapKit计算当前位置的方式中众所周知的差异。
CoreLocation 将始终使用位于美国加利福尼亚州库比蒂诺的Apple总部作为您当前的位置。这是蓝点总是出现在地图上的地方。
MapKit 将始终使用Apple的IP地址和WiFi热点信息数据库,使用与您当前实际位置近似的内容。如果您告诉它使用您当前的位置,这就是地图的中心位置。
因此,地图将以您当前的位置为中心,但是库比蒂诺的蓝点将会结束
CoreLocation 将蓝点放在接近实际当前位置的位置。
MapKit 将地图置于近似实际当前位置的位置。
因此,当使用实际的iOS设备时,您会在地图中心看到蓝点。
这一点知识可以节省很多压力。 :)
答案 1 :(得分:1)
万一有人想知道,这也有效:
if ([annotation isKindOfClass:[MKUserLocation class]])
{
return nil;
}
答案 2 :(得分:0)
这适用于我的代码
if(annotation == mapView.userLocation){
return nil;
}
试试并告诉我们
答案 3 :(得分:0)
确保实现[mapview addAnnotation: annotation ];
感谢Anna的提醒。