iphone - kit - MKPinAnnotationView: ¿Hay más de tres colores disponibles?
mapkit js (9)
De acuerdo con los documentos de Apple, el color del pin de MKPinAnnotationView está disponible en rojo, verde y morado. ¿Hay alguna manera de obtener otros colores también? No he encontrado nada en los documentos.
Con iOS 9, pinTintColor
se ha agregado a MKPinAnnotationView
, lo que le permite suministrar un UIColor
para el color del pin.
Intenté de esta manera y parece estar bien ...
UIImage * image = [UIImage imageNamed:@"blue_pin.png"];
UIImageView *imageView = [[[UIImageView alloc] initWithImage:image]
autorelease];
[annotationView addSubview:imageView];
annotationView = nil;
usando la imagen completa del pin ... como el ejemplo de YONEL
Me gusta la Respuesta de Yonel, pero solo un aviso, cuando creas una MKAnnotationView personalizada, tendrás que asignar manualmente la compensación. Para las imágenes proporcionadas por Yonel: (puede omitir las funciones de CalloutButton si no necesita una de ellas)
#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;
}
Ninguna de las soluciones publicadas funciona al 100% si está utilizando la animación de colocación de pin. La solución de Cannonade es muy ordenada porque permite que el pin tenga ambos tipos de extremos (el punto agudo al caer y el que tiene la ondulación circular del papel) pero desafortunadamente se puede ver el color original de la cabeza del pin cuando el pin rebota. toca el mapa ¡La solución de Yonel de reemplazar toda la imagen del pin significa que el pin cae con la ondulación del papel circular incluso antes de que llegue al mapa!
Puede encontrar útiles las siguientes imágenes:
y el código para usarlos en 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];
}
// ...
Puede usar ZSPinAnnotation
para crear pines de anotación sobre la marcha con un UIColor
especificado: github.com/nnhubbard/ZSPinAnnotation
Si no está en los documentos, entonces probablemente no, puede usar mkannotationview y tener su propia imagen si lo desea.
Y aquí está el PSD para el pin con sombra y su tamaño es @ 2x.
http://dl.dropbox.com/u/5622711/ios-pin.psd
Usa este PSD para cualquier color que quieras :)
No me atribuyo el mérito de este PSD. Acabo de obtenerlo de http://www.teehanlax.com/downloads/iphone-4-guid-psd-retina-display/ ¡Han hecho un trabajo maravilloso!
algo mas ;)
texto alternativo http://lionel.gueganton.free.fr/pins/pinGray.png
texto alternativo http://lionel.gueganton.free.fr/pins/pinOrange.png
Y los originales:
texto alternativo http://lionel.gueganton.free.fr/pins/pinGreen.png
texto alternativo http://lionel.gueganton.free.fr/pins/pinPurple.png
texto alternativo http://lionel.gueganton.free.fr/pins/pinRed.png
Y el código:
- (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;
}