MKPinAnnotationView: Zijn er meer dan drie kleuren verkrijgbaar?

stemmen
39

Volgens de Apple docs, MKPinAnnotationView's pin kleur is verkrijgbaar in rood, groen en paars. Is er een manier om andere kleuren ook te krijgen? Ik heb niets in de documenten gevonden.

De vraag is gesteld op 26/07/2009 om 22:32
bron van user
In andere talen...                            


9 antwoorden

stemmen
81

wat meer ;)

alt-tekst http://lionel.gueganton.free.fr/pins/pinGray.pngvoer image beschrijving hiervoer image beschrijving hier

alt-tekst http://lionel.gueganton.free.fr/pins/pinOrange.pngvoer image beschrijving hiervoer image beschrijving hier

En de oorspronkelijke:

alt-tekst http://lionel.gueganton.free.fr/pins/pinGreen.png Alt-tekst voer image beschrijving hier

alt-tekst http://lionel.gueganton.free.fr/pins/pinPurple.png Alt-tekst voer image beschrijving hier

alt-tekst http://lionel.gueganton.free.fr/pins/pinRed.png Alt-tekst voer image beschrijving hier

En de code:

- (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;
}
antwoordde op 14/01/2010 om 19:24
bron van user

stemmen
40

Misschien vindt u de volgende beelden nuttig:

Alt-tekst Alt-tekst Alt-tekst Alt-tekst

en de code om ze te gebruiken 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];
    }
    // ...
antwoordde op 26/12/2009 om 15:09
bron van user

stemmen
11

Je zou kunnen gebruiken ZSPinAnnotationom annotatie pinnen te maken op de vlieg met een gespecificeerde UIColor: https://github.com/nnhubbard/ZSPinAnnotation

antwoordde op 19/01/2012 om 19:57
bron van user

stemmen
8

Ik hou Yonel antwoord maar slechts een heads-up, wanneer u een aangepaste MKAnnotationView maken, dan moet je handmatig toe te wijzen de offset. Voor de beelden Yonel verstrekt: (kan je bij de calloutButton spul als je niet één van die nodig hebben)

#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;
}
antwoordde op 31/05/2010 om 18:59
bron van user

stemmen
4

Met iOS 9, pinTintColoris toegevoegd aan MKPinAnnotationView, zodat u een aanbod UIColorvoor de pin kleur.

antwoordde op 14/10/2015 om 13:29
bron van user

stemmen
4

En hier is de PSD van de pin met schaduw en zijn in @ 2x grootte.

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

Gebruik deze PSD voor welke kleur je wilt :)

Ik neem geen krediet voor deze PSD. Ik pakte het gewoon uit http://www.teehanlax.com/downloads/iphone-4-guid-psd-retina-display/ Ze een geweldige job gedaan!

antwoordde op 23/12/2011 om 23:09
bron van user

stemmen
3

Geen van de ter beschikking gestelde oplossingen werkt 100% als u gebruik maakt van de pincode afzetten animatie. Cannonade's oplossing zeer netjes omdat het mogelijk maakt dat de pen nog beide soorten uiteinden (de scherpe punt bij een val en een met de cirkelvormige papier rimpel) maar helaas een blik op de oorspronkelijke speldhoofd kleur zichtbaar wanneer de pen stuitert als het raakt de kaart. Yonel oplossing van het beeld de hele pin vervangen betekent dat de pin valt met de cirkelvormige papieren rimpel voordat het zelfs de kaart is geraakt!

antwoordde op 30/11/2010 om 21:39
bron van user

stemmen
2

Ik probeerde op deze manier en het lijkt te zijn ok ...

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

via het totale pen ... als voorbeeld Yonel

antwoordde op 18/11/2010 om 18:00
bron van user

stemmen
1

Als het niet in de docs dan zeer waarschijnlijk niet, dan kunt u gebruik maken van mkannotationview en hebben ur eigen beeld als u wenst niettemin

antwoordde op 26/07/2009 om 23:19
bron van user

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