我知道这个问题以前曾被其他人问过,而我之前在这个论坛上已经阅读过,但是到目前为止,由于运气不好,我尝试了所有建议的方法,所以我决定发布此问题。

我下面有这段代码,用于更改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/

10-10 21:09