我正在制作一张地图,在那里我可以看到我当前的位置,看看街道的名字。
到目前为止,我可以在我的地图上放置一个图钉,但出于某种原因,我没有收到标注。 我已经在我的viewForAnnotation方法中放了一个NSLog,但它没有被调用,所以我无法测试它。
有人可以帮助我吗?
-(void)lat:(float)lat lon:(float)lon
{
CLLocationCoordinate2D location;
location.latitude = lat;
location.longitude = lon;
NSLog(@"Latitude: %f, Longitude: %f",location.latitude, location.longitude);
//One location is obtained.. just zoom to that location
MKCoordinateRegion region;
region.center=location;
//Set Zoom level using Span
MKCoordinateSpan span;
span.latitudeDelta=.005f;
span.longitudeDelta=.005f;
region.span=span;
[map setRegion:region animated:TRUE];
//MKReverseGeocoder *geocoder=[[MKReverseGeocoder alloc] initWithCoordinate:location];
//geocoder.delegate=self;
//[geocoder start];
if (cPlacemark != nil) {
[map removeAnnotation:cPlacemark];
}
cPlacemark=[[CustomPlacemark alloc] initWithCoordinate:location];
cPlacemark.title = mPlacemark.thoroughfare;
cPlacemark.subtitle = mPlacemark.locality;
[map addAnnotation:cPlacemark];
[cPlacemark release];
[mLocationManager stopUpdatingLocation];
}
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
// try to dequeue an existing pin view first
if ([annotation isKindOfClass:[CustomPlacemark class]]){
MKPinAnnotationView *pinView=(MKPinAnnotationView *)[map dequeueReusableAnnotationViewWithIdentifier:@"customIdentifier"];
if (!pinView)
{
// if an existing pin view was not available, create one
MKPinAnnotationView* cPinAnnoView = [[[MKPinAnnotationView alloc]
initWithAnnotation:annotation reuseIdentifier:@"customIdentifier"] autorelease];
cPinAnnoView.pinColor = MKPinAnnotationColorPurple;
cPinAnnoView.animatesDrop = YES;
cPinAnnoView.canShowCallout = YES;
// Add button
UIButton *leftButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[leftButton addTarget:self action:@selector(annotationViewClick:) forControlEvents:UIControlEventTouchUpInside];
cPinAnnoView.leftCalloutAccessoryView = leftButton;
} else
{
pinView.annotation = annotation;
}
return pinView;
}
return nil;
}
现在我已经将我的viewForAnnotation定制为这样。 但我仍然无法从我的引脚获得标注,并且引脚仍为红色。 但它应该是紫色的
答案 0 :(得分:32)
我遇到了同样的问题,即没有将MapView委托设置为文件所有者。
答案 1 :(得分:23)
正如你所提到的,我遇到了同样的问题。委托已设置为ViewController,但未调用viewForAnnotation
选择器。经过一些检查后,我意识到如果你没有在主线程中调用addAnotation
,mapView就不会调用viewForAnnotation
,所以在更新后解决了我的问题:
在:
[_mMapView addAnnotation:marker];
后:
dispatch_async(dispatch_get_main_queue(), ^{
[_mMapView addAnnotation:marker];
});
答案 2 :(得分:7)
要启动viewForAnnotation
,请将mapView.delegate=self;
添加到例如viewDidLoad
。 - (void)viewDidLoad {
[super viewDidLoad];
mapView.delegate=self;
}
方法:
{{1}}
答案 3 :(得分:5)
您的注释是否已添加到MKMapView的当前视图区域之外?
答案 4 :(得分:2)
对于storyboard,Ctl将MKMapView拖动到ViewController底栏上的橙色圆圈,然后选择委托。
这将解决问题。
答案 5 :(得分:1)
其他人已经解释过,你没有将mapview委托与控制器连接的可能性很高。它首先要检查
答案 6 :(得分:1)
作为评论中提到的vatrif,您必须设置代理之前为MKMapView对象添加注释。
答案 7 :(得分:0)
我一直在使用ios 9 Mapview相关的应用程序,我遇到了同样的问题。
不知怎的,我解决了我的问题,在我的情况下我正在调整mapview
的大小。
我在调整delegate
的大小后添加了mapview
。它现在完美无缺。!
答案 8 :(得分:0)
在设置了mapview的委托之后,如果仍未调用viewforannotation,那么这就是你错过了 - 将self.mapView.showsUserLocation设置为YES,在界面构建器中你可以勾选属性检查器中的show userLocation选项