我知道其他人之前已经问过这个问题,之前我已经在这个论坛上看过了,但到目前为止,我已经尝试了所有提议的方法,所以我决定发布这个问题。
我在下面有这段代码,用于更改MKMapView上的图钉图标。然而,viewForAnnotation函数似乎甚至没有被MKMapView调用。人们说他们在将函数委托给文件所有者时遇到了一些问题,可以通过将.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;
}
DELEGATION
答案 0 :(得分: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...
}
答案 1 :(得分:0)
在您的.h
课程中导入bellow课程。
#import <MapKit/MapKit.h>
并在此类中添加MKMapViewDelegate
,如下所示......
@interface PTAViewController : UIViewController<MKMapViewDelegate>{
///...... your code..
}
@end
答案 2 :(得分:0)
据我了解,你设置插座,而不是委托。设置委托就像这样: