MKPinAnnotationView: Czy istnieją więcej niż trzy kolory dostępne?

głosy
39

Zgodnie z docs Apple, MKPinAnnotationView za pin kolor jest dostępny w kolorze czerwonym, zielonym i fioletowym. Czy istnieje jakiś sposób, aby uzyskać inne kolory też? Znalazłem nic w docs.

Utwórz 26/07/2009 o 22:32
źródło użytkownik
W innych językach...                            


9 odpowiedzi

głosy
81

trochę więcej ;)

alt text http://lionel.gueganton.free.fr/pins/pinGray.pngwprowadzić opis obrazu tutajwprowadzić opis obrazu tutaj

alt text http://lionel.gueganton.free.fr/pins/pinOrange.pngwprowadzić opis obrazu tutajwprowadzić opis obrazu tutaj

I oryginalne:

alt text http://lionel.gueganton.free.fr/pins/pinGreen.png tekst alternatywny wprowadzić opis obrazu tutaj

alt text http://lionel.gueganton.free.fr/pins/pinPurple.png tekst alternatywny wprowadzić opis obrazu tutaj

alt text http://lionel.gueganton.free.fr/pins/pinRed.png tekst alternatywny wprowadzić opis obrazu tutaj

I kod:

- (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;
}
Odpowiedział 14/01/2010 o 19:24
źródło użytkownik

głosy
40

Może się okazać użyteczne następujące obrazy:

tekst alternatywny tekst alternatywny tekst alternatywny tekst alternatywny

a kod do korzystania z nich w 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];
    }
    // ...
Odpowiedział 26/12/2009 o 15:09
źródło użytkownik

głosy
11

Można użyć ZSPinAnnotationdo tworzenia adnotacji szpilki na bieżąco z określoną UIColor: https://github.com/nnhubbard/ZSPinAnnotation

Odpowiedział 19/01/2012 o 19:57
źródło użytkownik

głosy
8

Lubię Odbierz Yonel za ale tylko głowy do góry, podczas tworzenia niestandardowych MKAnnotationView, będziesz musiał ręcznie przydzielić offsetu. Na obrazach Yonel przewidzianymi: (można pominąć rzeczy calloutButton jeśli nie trzeba jedną z tych)

#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;
}
Odpowiedział 31/05/2010 o 18:59
źródło użytkownik

głosy
4

Z iOS 9, pinTintColorzostał dodany do MKPinAnnotationView, co pozwala dostarczać UIColordla koloru pin.

Odpowiedział 14/10/2015 o 13:29
źródło użytkownik

głosy
4

A oto PSD dla kołka w tle i jej w @ 2x wielkości.

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

Użyj tej PSD na dowolny kolor chcesz :)

Biorę żadnego kredytu w tym PSD. Właśnie chwycił ją od http://www.teehanlax.com/downloads/iphone-4-guid-psd-retina-display/ Mają wspaniałą robotę!

Odpowiedział 23/12/2011 o 23:09
źródło użytkownik

głosy
3

Żadna z zamieszczonych rozwiązań działać w 100%, jeśli używasz animację muche. Rozwiązanie kanonada jest bardzo schludny, ponieważ pozwala kołek do jeszcze oba rodzaje końcówek (ostry czubek kiedy spada, a ten z okrągłym papieru tętnienia), ale niestety wgląd w oryginalnym kolorze pin głowy widać, gdy odbija pin trafi mapę. Rozwiązanie yonel za zastąpić cały szpilka zdjęcie Oznacza kołek spada z okrągłym papieru tętnienia zanim to nawet uderzyć mapę!

Odpowiedział 30/11/2010 o 21:39
źródło użytkownik

głosy
2

Próbowałem w ten sposób i to wydaje się być ok ...

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

stosując kompletny szpilka zdjęcie ... jak yonel przykład

Odpowiedział 18/11/2010 o 18:00
źródło użytkownik

głosy
1

Jeśli nie nie jest w docs następnie najprawdopodobniej można użyć mkannotationview i mają ur własny obraz, jeśli u chcą choć

Odpowiedział 26/07/2009 o 23:19
źródło użytkownik

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