MKPinAnnotationView: доступно ли более трех цветов?

Согласно документации Apple, цвет булавки MKPinAnnotationView доступен в красном, зеленом и фиолетовом цветах. Есть ли способ получить и другие цвета? Я ничего не нашел в документации.


person Stefan    schedule 26.07.2009    source источник
comment
Вы можете использовать ZSPinAnnotation для создания аннотаций на лету с указанным UIColor: github.com/nnhubbard/ZSPinAnnotation   -  person Nic Hubbard    schedule 09.03.2012


Ответы (9)


Вам могут пригодиться следующие изображения:

alt textalt text alt text альтернативный текст

и код для их использования в 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];
    }
    // ...
person RedBlueThing    schedule 26.12.2009
comment
Без проблем. Рад, что ты нашел их полезными. - person RedBlueThing; 12.01.2010

еще немного ;)

alt text введите описание изображения здесь введите описание изображения здесь

alt text введите описание изображения здесь введите описание изображения здесь

И оригинальные:

alt text alt text введите описание изображения здесь

alt text alt text введите описание изображения здесь

alt text alt text введите описание изображения здесь

И код:

- (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;
}
person yonel    schedule 14.01.2010
comment
Привет, а как достали оригинальные булавки? Спасибо. Доступны ли версии @ 2x? - person Matt Sephton; 20.07.2010
comment
Я запустил в симуляторе фрагмент кода, который записывает UIImage в файловую систему с помощью UIImagePNGRepresentation (yourImage). Изображение - ›NSData -› файловая система. У меня нет доступных версий @ 2x: / - person yonel; 09.08.2010
comment
матовый, я добавил сетчатку для пинов. а также код, используемый для их рендеринга. - person yonel; 07.09.2010
comment
Ссылка на изображение не работает. Вы можете исправить их, пожалуйста? Данке - person Sanjit Saluja; 17.11.2011
comment
странно, потому что вы правы, некоторое время назад ссылки были битые, НО сейчас я могу их снова увидеть ....: / Вы их не видите? - person yonel; 17.11.2011
comment
странно, теперь я их больше не вижу :( что происходит с imagur.com? - person yonel; 17.11.2011
comment
Можно ли что-нибудь сделать, чтобы анимация падения булавки не отображала исходный цвет при касании? - person MGA; 15.12.2011
comment
У вас есть изображение желтой булавки размером с сетчатку? - person Andrew; 01.05.2012
comment
Можете ли вы случайно опубликовать изображения в высоком разрешении для оранжевого и серого? - person Dean Leitersdorf; 12.04.2015
comment
@DeanLeitersdorf: добавлено;) - person yonel; 15.04.2015
comment
@yonel Большое спасибо! Как вы их создаете? - person Dean Leitersdorf; 16.04.2015
comment
@DeanLeitersdorf на самом деле я получаю исходный ресурс Apple из вставленного здесь кода, а затем вручную настраиваю цвет верхней части булавки с помощью фотошопа - person yonel; 16.04.2015
comment
Я добавил репозиторий github, извлекающий некоторые из распространенных цветов. github.com/StevenTso/MKPinAnnotationViewColoredPins - person StevenTsooo; 05.06.2015

Вы можете использовать ZSPinAnnotation для создания аннотаций на лету с указанным UIColor: https://github.com/nnhubbard/ZSPinAnnotation

person Nic Hubbard    schedule 19.01.2012
comment
Привет, @ Ник-Хаббард - спасибо, что поделились кодом. Это причина, по которой вы не добавили бы эту категорию в MKAnnotation, чтобы вы могли установить pinView.image = [MKAnnotation pinAnnotationWithColor:a.color] - person earnshavian; 08.03.2012
comment
@earnshavian На самом деле нет причин, думаю, я тогда не думал об этом! - person Nic Hubbard; 09.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;
}
person BadPirate    schedule 31.05.2010
comment
Кстати, если 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/ Они проделали замечательную работу!

person Vashishtha Jogi    schedule 23.12.2011

В iOS 9 в MKPinAnnotationView был добавлен pinTintColor, что позволяет указать UIColor для цвета вывода.

person duncanc4    schedule 14.10.2015

Ни одно из опубликованных решений не работает на 100%, если вы используете анимацию падения булавки. Решение Cannonade очень изящное, потому что оно позволяет булавке иметь оба вида концов (острый при падении и тот, который имеет круговую рябь на бумаге), но, к сожалению, можно увидеть проблеск первоначального цвета головки булавки, когда булавка отскакивает как он попадает в карту. Решение yonel по замене всего изображения булавки означает, что булавка падает с круговой бумажной рябью еще до того, как она попадет на карту!

person malhal    schedule 30.11.2010

Я пробовал этот способ и вроде нормально ...

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

используя полное изображение булавки ... как пример yonel

person mt81    schedule 18.11.2010
comment
Только код, который работает в iOS 8 (другие ответы ничего не делают). Спасибо! - person Dean Leitersdorf; 12.04.2015

Если его нет в документации, то, скорее всего, нет, вы можете использовать mkannotationview и иметь собственное изображение, если хотите.

person Daniel    schedule 26.07.2009