kit iphone cocoa-touch mapkit mkpinannotationview

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]; } // ...



Si no está en los documentos, entonces probablemente no, puede usar mkannotationview y tener su propia imagen si lo desea.



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