web-dev-qa-db-ja.com

MKPinAnnotationView:3つ以上の色を利用できますか?

Apple docsによると、MKPinAnnotationViewピンの色は赤、緑、紫で利用できます。他の色を取得する方法はありますか?私はドキュメントで何も見つかりませんでした。

39
Stefan

次の画像が役立つ場合があります。

alt textalt textalt textalt text

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

もう少し;)

alt text enter image description hereenter image description here

alt text enter image description hereenter image description here

そしてオリジナルのもの:

alt text alt textenter image description here

alt text alt textenter image description here

alt text alt textenter image description here

そしてコード:

- (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;
}
81
yonel

ZSPinAnnotationを使用すると、指定したUIColorを使用してその場で注釈ピンを作成できます。 https://github.com/nnhubbard/ZSPinAnnotation

11
Nic Hubbard

私は Yonel's Answer が好きですが、ヘッドアップです。カスタムMKAnnotationViewを作成するときは、手動でオフセットを割り当てる必要があります。 Yonelが提供する画像の場合:(これらのいずれかが必要ない場合は、calloutButtonのものを省略できます)

#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;
}
8
BadPirate

そして、これが影付きのピンとその2xサイズのPSDです。

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

このPSDを任意の色に使用してください:)

このPSDは信用できません。私は http://www.teehanlax.com/downloads/iphone-4-guid-psd-retina-display/ からそれを取得しました==彼らは素晴らしい仕事をしました!

4
Vashishtha Jogi

IOS 9では、pinTintColorMKPinAnnotationViewに追加され、ピンの色にUIColorを指定できるようになりました。

4
duncanc4

ピンドロップアニメーションを使用している場合、投稿されたソリューションはどちらも100%機能しません。キャノネードの解決策は、ピンが両方の種類の端(落下時の鋭い点と円形の紙の波紋を持つもの)を維持できるため、非常に巧妙ですが、残念ながら、ピンが次のように跳ね返ると、元のピンの頭の色が垣間見えますそれは地図に当たります。ピン画像全体を置き換えるというyonelの解決策は、ピンが地図に当たる前に円形の紙の波紋で落ちるということです!

3
malhal

私はこの方法を試してみましたが、問題ないようです...

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

完全なピン画像を使用して...ヨーネルの例として

2
mt81

それがドキュメントにない場合、おそらくそうではないでしょう、あなたはmkannotationviewを使用し、あなたが望むならあなた自身の画像を持っています

1
Daniel