39

根据 Apple 文档,MKPinAnnotationView 的引脚颜色有红色、绿色和紫色可供选择。有什么办法也可以得到其他颜色吗?我在文档中什么也没找到。

4

9 回答 9

81

多一点 ;)

替代文字 在此处输入图像描述在此处输入图像描述

替代文字 在此处输入图像描述在此处输入图像描述

和原来的:

替代文字 替代文字 在此处输入图像描述

替代文字 替代文字 在此处输入图像描述

替代文字 替代文字 在此处输入图像描述

和代码:

- (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;
}
于 2010-01-14T18:24:04.223 回答
40

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

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

以及在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];
    }
    // ...
于 2009-12-26T14:09:57.623 回答
11

您可以使用ZSPinAnnotation指定的动态创建注释引脚UIColorhttps ://github.com/nnhubbard/ZSPinAnnotation

于 2012-01-19T18:57:15.550 回答
8

我喜欢Yonel 的答案,但请注意,当您创建自定义 MKAnnotationView 时,您必须手动分配偏移量。对于 Yonel 提供的图像:(如果您不需要其中之一,可以省略 calloutButton 的东西)

#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;
}
于 2010-05-31T17:59:49.963 回答
4

这是带有阴影的引脚的 PSD 及其 @2x 大小。

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

将此PSD用于您想要的任何颜色:)

我不相信这个 PSD。我刚刚从http://www.teehanlax.com/downloads/iphone-4-guid-psd-retina-display/抓取了它,他们做得很好!

于 2011-12-23T22:09:39.093 回答
4

在 iOS 9 中,pinTintColor已添加到MKPinAnnotationView,允许您UIColor为 pin 颜色提供一个。

于 2015-10-14T13:29:16.160 回答
3

如果您使用的是图钉放置动画,则发布的解决方案都不能 100% 工作。Cannonade 的解决方案非常简洁,因为它允许大头针仍然有两种末端(落下时的尖点和带有圆形纸波纹的末端),但不幸的是,当大头针弹跳时可以看到原始针头颜色的一瞥它击中了地图。yonel 替换整个 pin 图像的解决方案意味着 pin 甚至在击中地图之前就随着圆形纸波纹掉落!

于 2010-11-30T20:39:17.073 回答
2

这个方法我试过了,好像没问题...

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

使用完整的 pin 图像...作为 yonel 示例

于 2010-11-18T17:00:46.007 回答
1

如果它不在文档中,那么很可能不在,你可以使用 mkannotationview 并拥有你自己的图像,如果你愿意的话

于 2009-07-26T22:19:06.570 回答