MKPinAnnotationView: ci sono più di tre colori disponibili?

voti
39

Secondo la documentazione di Apple, il colore pin di MKPinAnnotationView è disponibile nei colori rosso, verde e viola. C'è un modo per ottenere altri colori? Non ho trovato nulla nella documentazione.

È pubblicato 26/07/2009 alle 22:32
fonte dall'utente
In altre lingue...                            


9 risposte

voti
81

ancora un po ';)

alt text http://lionel.gueganton.free.fr/pins/pinGray.pngentrare descrizione dell'immagine quientrare descrizione dell'immagine qui

alt text http://lionel.gueganton.free.fr/pins/pinOrange.pngentrare descrizione dell'immagine quientrare descrizione dell'immagine qui

E quelli originali:

alt text http://lionel.gueganton.free.fr/pins/pinGreen.png alt text entrare descrizione dell'immagine qui

alt text http://lionel.gueganton.free.fr/pins/pinPurple.png alt text entrare descrizione dell'immagine qui

alt text http://lionel.gueganton.free.fr/pins/pinRed.png alt text entrare descrizione dell'immagine qui

E il codice:

- (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;
}
Risposto il 14/01/2010 a 19:24
fonte dall'utente

voti
40

Potreste trovare le seguenti immagini utili:

alt text alt text alt text alt text

e il codice per utilizzarli in 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];
    }
    // ...
Risposto il 26/12/2009 a 15:09
fonte dall'utente

voti
11

Si potrebbe utilizzare ZSPinAnnotationper creare i perni di annotazione al volo con un determinato UIColor: https://github.com/nnhubbard/ZSPinAnnotation

Risposto il 19/01/2012 a 19:57
fonte dall'utente

voti
8

Mi piace risposta di Yonel ma solo un testa a testa, quando si crea un custom MKAnnotationView, dovrete assegnare manualmente l'offset. Per le immagini Yonel fornito: (è possibile lasciare la roba calloutButton se non avete bisogno di uno di quelli)

#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;
}
Risposto il 31/05/2010 a 18:59
fonte dall'utente

voti
4

Con iOS 9, pinTintColorè stato aggiunto a MKPinAnnotationView, che consente di fornire unUIColor per il colore pin.

Risposto il 14/10/2015 a 13:29
fonte dall'utente

voti
4

E qui è il PSD per il perno con ombra e si trova in @ 2x dimensioni.

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

Utilizzare questa PSD per qualsiasi colore desiderato :)

Prendo alcun credito per questo PSD. Ho appena preso da http://www.teehanlax.com/downloads/iphone-4-guid-psd-retina-display/ Hanno fatto un ottimo lavoro!

Risposto il 23/12/2011 a 23:09
fonte dall'utente

voti
3

Nessuna delle soluzioni postate lavorare al 100% se si utilizza l'animazione cadere uno spillo. La soluzione di cannonade è molto ordinato, poiché permette al perno di avere ancora entrambi i tipi di estremità (la punta tagliente quando cadono e quello con l'ondulazione carta circolare) ma purtroppo intravedere il colore testa del perno originale può essere visto quando i rimbalzi PIN colpisce la mappa. La soluzione di yonel di sostituire l'intera immagine mezzi a perno perno cade con l'ondulazione carta circolare prima ancora colpito mappa!

Risposto il 30/11/2010 a 21:39
fonte dall'utente

voti
2

Ho cercato in questo modo e sembra essere ok ...

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

utilizzando l'immagine completa perno ... come esempio yonel

Risposto il 18/11/2010 a 18:00
fonte dall'utente

voti
1

Se non non è nella documentazione allora molto probabilmente, è possibile utilizzare mkannotationview e hanno ur propria immagine se u desiderio però

Risposto il 26/07/2009 a 23:19
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more