MKPinAnnotationView: Are there more than three colors available?

血红的双手。 提交于 2019-11-26 06:55:54

问题


According to the Apple docs, MKPinAnnotationView\'s pin color is available in red, green and purple. Is there any way to get other colors also? I\'ve found nothing in the docs.


回答1:


You might find the following images useful:

and the code to use them in 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];     }     // ... 



回答2:


some more ;)

And the original ones :

And the code:

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



回答3:


You could use ZSPinAnnotation to create annotation pins on the fly with a specified UIColor: https://github.com/nnhubbard/ZSPinAnnotation




回答4:


I like Yonel's Answer but just a heads up, when you create a custom MKAnnotationView, you'll have to manually assign the offset. For the images Yonel provided: (you can leave out the calloutButton stuff if you don't need one of those)

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



回答5:


And here is the PSD for the pin with shadow and its in @2x size.

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

Use this PSD for any color you want :)

I take no credit for this PSD. I just grabbed it from http://www.teehanlax.com/downloads/iphone-4-guid-psd-retina-display/ They have done a wonderful job!




回答6:


With iOS 9, pinTintColor has been added to MKPinAnnotationView, allowing you to supply a UIColor for the pin color.




回答7:


Neither of the posted solutions work 100% if you are using the pin drop animation. Cannonade's solution is very neat because it allows the pin to still have both kinds of ends (the sharp point when falling and the one with the circular paper ripple) but unfortunately a glimpse of the original pin head colour can be seen when the pin bounces as it hits the map. yonel's solution of replacing the whole pin image means the pin falls with the circular paper ripple before it's even hit the map!




回答8:


I tried this way and it seems to be ok...

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

using the complete pin image... as the yonel example




回答9:


If it's not in the docs then most probably not, you cAn use mkannotationview and have ur own image if u wish though



来源:https://stackoverflow.com/questions/1185611/mkpinannotationview-are-there-more-than-three-colors-available

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!