MKPinAnnotationView:有三种以上的颜色可用吗?

根据苹果文档,MKPinAnnotationView的针颜色有红色,绿色和紫色。 有什么方法可以得到其他颜色? 我没有发现任何文件。

您可能会发现以下图像很有用:

替代文字替代文字替代文字替代文字

以及在viewForAnnotation中使用它们的代码:

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation { // ... get the annotation delegate and allocate the MKAnnotationView (annView) if ([annotationDelegate.type localizedCaseInsensitiveCompare:@"NeedsBluePin"] == NSOrderedSame) { UIImage * image = [UIImage imageNamed:@"blue_pin.png"]; UIImageView *imageView = [[[UIImageView alloc] initWithImage:image] autorelease]; [annView addSubview:imageView]; } // ... 

多一点 ;)

替代文字http://lionel.gueganton.free.fr/pins/pinGray.png 在这里输入图像说明在这里输入图像说明

替代文字http://lionel.gueganton.free.fr/pins/pinOrange.png 在这里输入图像说明在这里输入图像说明

原来的:

替代文字http://lionel.gueganton.free.fr/pins/pinGreen.png 替代文字在这里输入图像说明

替代文字http://lionel.gueganton.free.fr/pins/pinPurple.png 替代文字在这里输入图像说明

替代文字http://lionel.gueganton.free.fr/pins/pinRed.png 替代文字在这里输入图像说明

和代码:

 - (MKAnnotationView*)mapView:(MKMapView*)mapView viewForAnnotation:(id <MKAnnotation>)annotation { MKPinAnnotationView* anView =[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"test"]; anView.pinColor=MKPinAnnotationColorPurple; UIImage* image = nil; // 2.0 is for retina. Use 3.0 for iPhone6+, 1.0 for "classic" res. UIGraphicsBeginImageContextWithOptions(anView.frame.size, NO, 2.0); [anView.layer renderInContext: UIGraphicsGetCurrentContext()]; image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); NSData* imgData = UIImagePNGRepresentation(image); NSString* targetPath = [NSString stringWithFormat:@"%@/%@", [self writablePath], @"thisismypin.png" ]; [imgData writeToFile:targetPath atomically:YES]; return anView; } -(NSString*) writablePath { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; return documentsDirectory; } 

您可以使用ZSPinAnnotation通过指定的UIColor快速创build注释引脚: https : //github.com/nnhubbard/ZSPinAnnotation

我喜欢Yonel的答案,但只是一个头,当你创build一个自定义MKAnnotationView,你将不得不手动分配偏移量。 Yonel提供的图片:(如果你不需要其中的一个,你可以省略标注button)

 #pragma mark MKMapViewDelegate - (MKAnnotationView *)mapView:(MKMapView *)aMapView viewForAnnotation:(id <MKAnnotation>)annotation { if(![annotation isKindOfClass:[MyAnnotation class]]) // Don't mess user location return nil; MKAnnotationView *annotationView = [aMapView dequeueReusableAnnotationViewWithIdentifier:@"spot"]; if(!annotationView) { annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"spot"]; annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; [(UIButton *)annotationView.rightCalloutAccessoryView addTarget:self action:@selector(openSpot:) forControlEvents:UIControlEventTouchUpInside]; annotationView.enabled = YES; annotationView.canShowCallout = YES; annotationView.centerOffset = CGPointMake(7,-15); annotationView.calloutOffset = CGPointMake(-8,0); } // Setup annotation view annotationView.image = [UIImage imageNamed:@"pinYellow.png"]; // Or whatever return annotationView; } 

这里是PSD的影子和它在@ 2x大小的针。

http://dl.dropbox.com/u/5622711/ios-pin.psd

使用这个PSD你想要的任何颜色:)

我不赞成这个PSD。 我只是从http://www.teehanlax.com/downloads/iphone-4-guid-psd-retina-display/上抓起来的,他们做得很出色!;

在iOS 9中, pinTintColor已被添加到MKPinAnnotationView ,允许您为引脚颜色提供UIColor

如果您正在使用引脚放置animation,则任何发布的解决scheme都不能100%工作。 Cannonade的解决scheme是非常整齐的,因为它允许销仍然具有两种types的端点(下降时的尖锐点和具有圆形纸纹波的点),但不幸的是,当销弹起时,可以看到原始销头颜色的一瞥它击中地图。 yonel的更换整个针图像的解决scheme意味着引脚与圆形纸纹波下降之前,它甚至打地图!

我试过这种方式,似乎没关系…

 UIImage * image = [UIImage imageNamed:@"blue_pin.png"]; UIImageView *imageView = [[[UIImageView alloc] initWithImage:image] autorelease]; [annotationView addSubview:imageView]; annotationView = nil; 

使用完整的引脚图像…作为yonel的例子

如果它不在文档中,那么很可能不是,你可以使用mkannotationview,如果你想