Согласно документации Apple, цвет булавки MKPinAnnotationView доступен в красном, зеленом и фиолетовом цветах. Есть ли способ получить и другие цвета? Я ничего не нашел в документации.
MKPinAnnotationView: доступно ли более трех цветов?
Ответы (9)
Вам могут пригодиться следующие изображения:
и код для их использования в 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];
}
// ...
еще немного ;)
И оригинальные:
И код:
- (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
: https://github.com/nnhubbard/ZSPinAnnotation
pinView.image = [MKAnnotation pinAnnotationWithColor:a.color]
- person earnshavian; 08.03.2012
Мне нравится ответ Йонеля, но только головы вверх, когда вы создаете собственный MKAnnotationView, вам придется вручную назначить смещение. Для изображений, предоставленных Йонелем: (вы можете не указывать материал 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;
}
annotationView
успешно удаляет представление аннотации из очереди, вам необходимо обновить его свойство annotation
. Например, у вас обычно есть if (!annotationView) { ... } else { annotationView.annotation = annotation; }
.
- person Rob; 21.08.2017
А вот 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 в MKPinAnnotationView
был добавлен pinTintColor
, что позволяет указать UIColor
для цвета вывода.
Ни одно из опубликованных решений не работает на 100%, если вы используете анимацию падения булавки. Решение Cannonade очень изящное, потому что оно позволяет булавке иметь оба вида концов (острый при падении и тот, который имеет круговую рябь на бумаге), но, к сожалению, можно увидеть проблеск первоначального цвета головки булавки, когда булавка отскакивает как он попадает в карту. Решение yonel по замене всего изображения булавки означает, что булавка падает с круговой бумажной рябью еще до того, как она попадет на карту!
Я пробовал этот способ и вроде нормально ...
UIImage * image = [UIImage imageNamed:@"blue_pin.png"];
UIImageView *imageView = [[[UIImageView alloc] initWithImage:image]
autorelease];
[annotationView addSubview:imageView];
annotationView = nil;
используя полное изображение булавки ... как пример yonel
Если его нет в документации, то, скорее всего, нет, вы можете использовать mkannotationview и иметь собственное изображение, если хотите.