我知道这个问题以前曾被其他人问过,而我之前在这个论坛上已经阅读过,但是到目前为止,由于运气不好,我尝试了所有建议的方法,所以我决定发布此问题。
我下面有这段代码,用于更改MKMapView上的图钉图标。但是,MKMapView似乎没有调用viewForAnnotation函数。人们说,将函数委派给文件所有者会遇到一些问题,这可以通过将.xib文件中的地图视图拖动到文件所有者或定义myMap.delegate = self来完成。我已经做过两种方式,但仍然一无所获。
非常感谢您为我的问题提供的任何帮助,谢谢。
CODE:
- (MKPinAnnotationView*)myMap:(MKMapView*)myMap viewForAnnotation:(id<MKAnnotation>)annotation{
MKPinAnnotationView *pin = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:@"CustomPin"];
UIImage *icon = [UIImage imageNamed:@"bustour.png"];
UIImageView *iconView = [[UIImageView alloc] initWithFrame:CGRectMake(8,0,32,37)];
if(icon == nil)
NSLog(@"image: ");
else
NSLog(@"image: %@", (NSString*)icon.description);
[iconView setImage:icon];
[pin addSubview:iconView];
pin.canShowCallout = YES;
pin.pinColor = MKPinAnnotationColorPurple;
return pin;
}
代理
最佳答案
您的委托方法被错误地命名为myMap:viewForAnnotation:
。viewForAnnotation
委托方法必须将命名为mapView:viewForAnnotation:
,如下所示:
- (MKAnnotationView *)mapView:(MKMapView *)mapView
viewForAnnotation:(id < MKAnnotation >)annotation
{
//code goes here...
}
地图视图将查找该确切的方法名称。
如果找不到,它将不会调用它,而是创建一个默认的红色图钉。
您可以更改内部参数的名称,但不能更改方法的名称。
例如,这也可以:
- (MKAnnotationView *)mapView:(MKMapView *)myMap
viewForAnnotation:(id < MKAnnotation >)annotation
{
//code goes here...
}
关于ios - 没有调用viewForAnnotation(iOS noob),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17402876/