MKPinAnnotationView: Existem mais de três colors disponíveis?

De acordo com os documentos da Apple, a cor dos pinos do MKPinAnnotationView está disponível em vermelho, verde e roxo. Existe alguma maneira de obter outras colors também? Eu não encontrei nada nos documentos.

Você pode encontrar as seguintes imagens úteis:

texto alternativotexto alternativotexto alternativotexto alternativo

e o código para usá-los em viewForAnnotation :

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id ) 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]; } // ... 

um pouco mais 😉

texto alternativo http://lionel.gueganton.free.fr/pins/pinGray.png insira a descrição da imagem aquiinsira a descrição da imagem aqui

texto alternativo http://lionel.gueganton.free.fr/pins/pinOrange.png insira a descrição da imagem aquiinsira a descrição da imagem aqui

E os originais:

texto alternativo http://lionel.gueganton.free.fr/pins/pinGreen.png texto alternativoinsira a descrição da imagem aqui

texto alternativo http://lionel.gueganton.free.fr/pins/pinPurple.png texto alternativoinsira a descrição da imagem aqui

texto alternativo http://lionel.gueganton.free.fr/pins/pinRed.png texto alternativoinsira a descrição da imagem aqui

E o código:

 - (MKAnnotationView*)mapView:(MKMapView*)mapView viewForAnnotation:(id )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; } 

Você poderia usar ZSPinAnnotation para criar pinos de anotação UIColor com um UIColor especificado: https://github.com/nnhubbard/ZSPinAnnotation

Eu gosto da resposta de Yonel, mas apenas um heads up, quando você cria um MKAnnotationView personalizado, você terá que atribuir manualmente o offset. Para as imagens que Yonel forneceu: (você pode deixar de fora o material do calloutButton se não precisar de um desses)

 #pragma mark MKMapViewDelegate - (MKAnnotationView *)mapView:(MKMapView *)aMapView viewForAnnotation:(id )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; } 

E aqui está o PSD para o pino com sombra e seu tamanho @ 2x.

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

Use este PSD para qualquer cor que você quiser 🙂

Eu não aceito nenhum crédito por este PSD. Eu peguei de http://www.teehanlax.com/downloads/iphone-4-guid-psd-retina-display/ Eles fizeram um trabalho maravilhoso!

Com o iOS 9, o pinTintColor foi adicionado ao MKPinAnnotationView , permitindo que você forneça um UIColor para a cor do pino.

Nenhuma das soluções postadas funciona 100% se você estiver usando a animação de queda de pinos. A solução da Cannonade é muito legal porque permite que o pino ainda tenha ambos os tipos de extremidades (o ponto afiado ao cair e aquele com ondulação de papel circular) mas infelizmente um vislumbre da cor original da cabeça do alfinete pode ser visto quando o pino ele atinge o mapa. A solução de yonel de replace toda a imagem do pino significa que o pino cai com a ondulação de papel circular antes mesmo de chegar ao mapa!

Eu tentei desse jeito e parece estar tudo bem …

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

usando a imagem completa do pin … como o exemplo yonel

Se não estiver nos documentos, então provavelmente não, você pode usar mkannotationview e ter sua própria imagem se desejar