2011-05-30 130 views
6

我想用特定图像替换典型的iOS mapkit“pin”。我是新来的编码,所以我不知道到底为什么这是行不通的,但这里是我已经尝试:iOS中的自定义注释图像

的方法

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 

我有,除其他事项外,这个:

pinView.animatesDrop=YES; 
pinView.canShowCallout=YES; 
//pinView.pinColor=MKPinAnnotationColorPurple; 
UIImage *pinImage = [UIImage imageNamed:@"Jeff.png"]; 
[pinView setImage:pinImage]; 

但是,即使代码编译好,pinView没有被设置pinImage。任何想法为什么不呢?

+0

请参阅http://stackoverflow.com/questions/5373265/custom-mkannotation-image-goes-back-to-default-when-i-attempt-to-drag,http://stackoverflow.com/questions/ 10501341/mkpinannotationview-custom-image-is-replacement-by-pin-with-animating-drop,http://stackoverflow.com/questions/9814988/mkmapview-instead-of-annotation-pin-a-custom-view,等 – Anna 2012-07-10 11:57:05

回答

3

所有你需要做的就是最后一行改为:

[pinView addSubview:pinImage]; 

完整的例子:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 

    MKPinAnnotationView *annView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"ParkingPin"]; 

    UIImageView *imageView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pin_parking.png"]] autorelease]; 

    annView.animatesDrop = TRUE; 
    annView.canShowCallout = YES; 
    annView.calloutOffset = CGPointMake(-5, 5); 
    [annView addSubview:imageView]; 
    return annView; 
} 

希望这有助于!

+3

不起作用。它显示引脚和图像。 – Oliver 2011-08-28 23:35:59

3

图像应设置为annView的按钮instand,我用的是这样的:

UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; 
[button setImage:[UIUtils getStyleImage:@"page_map_accessory_button.png"] forState:UIControlStateNormal]; 
[button setImage:[UIUtils getStyleImage:@"page_map_accessory_button.png"] forState:UIControlStateSelected]; 
[button setImage:[UIUtils getStyleImage:@"page_map_accessory_button.png"] forState:UIControlStateHighlighted]; 
pinView.rightCalloutAccessoryView = button; 
0

只要做到:

annView.image=[UIImage imageNamed:@"imagename.png"]; 
2

我没有看到这里的答案是,你必须在viewForAnnotation方法中出列或创建一个MKAnnotationView,并将您的类作为地图视图的委托,以便它调用此方法来获取视图。

如果您在其他地方创建了注释视图,那么使用图像属性设置的任何自定义图像将不会显示,您将只能看到一个图钉。

+0

MKAnnotationView的作品,MKPinAnnotationView不会。 – Jenn 2013-06-02 15:29:51

+0

PinAnnotationView应该只使用内置的引脚图像,因为我理解它,所以我不认为它会支持设置自定义图像... – 2013-06-03 00:32:41

1

只需从代码中删除“animatesDrop”行。它会为你工作。