1

我知道这个问题之前已经被其他人问过,并且我之前在这个论坛上读过它们,但是到目前为止我已经尝试了所有建议的方法,但没有运气,所以我决定发布这个问题。

我在下面有这段代码,用于更改 MKMapView 上的图钉图标。然而,viewForAnnotation 函数似乎甚至没有被 MKMapView 调用。人们说他们在将函数委托给文件所有者时遇到了一些问题,这可以通过将 .xib 文件中的地图视图拖到文件所有者或定义 myMap.delegate = self 来完成。我已经做了两种方式,但仍然一无所获。

非常感谢您对我的问题的任何帮助,谢谢。

代码:

- (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;
}

代表团 在此处输入图像描述

4

3 回答 3

4

您的委托方法被错误地命名为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...
}
于 2013-07-01T12:01:19.423 回答
0

在您的课程中导入波纹管.h课程..

#import <MapKit/MapKit.h>

MKMapViewDelegate像下面这样添加你的这个类......

@interface PTAViewController : UIViewController<MKMapViewDelegate>{

  ///...... your code..

}

@end
于 2013-07-01T11:06:03.813 回答
0

据我了解,您设置了出口,而不是代表。要设置委托,请这样做:在此处输入图像描述

于 2013-07-01T11:08:52.230 回答