「前面」イメージの背後に別のイメージを追加するために、 and をサブクラス化してandメソッドをMKAnnotatonView
オーバーライドしました。initWithAnnotation:resueIdentifier
drawRect
それが、Apple のMKAnnotationView
クラス リファレンスが推奨していることのようです。
トリッキーなのはそれだけです。をサブクラス化する場合MKAnnotationView
、image プロパティはまだ存在しています。作画と連動するようにちゃんと工夫されています。おそらく、初期化が完了した後に画像を描画するために drawRect をオーバーライドしました。
また、image プロパティを設定しない場合、カスタムのフレームはannotationView
サイズ 0 に設定され、drawRect
メソッドは呼び出されません。
最後に、Apple は画像を完全に塗りつぶす必要があると述べています。つまり、描画の背景には透明な色を使用します。
だから:あなたのサブクラスで:
- (id)initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)identifier
{
self = [super initWithAnnotation:annotation reuseIdentifier:identifier];
if (self)
{
UIButton *rightButton = [UIButton buttonWithType: UIButtonTypeDetailDisclosure];
[rightButton addTarget:self
action:@selector(myShowAnnotationAddress:)
forControlEvents:UIControlEventTouchUpInside];
self.rightCalloutAccessoryView = rightButton;
self.canShowCallout = YES;
self.multipleTouchEnabled = NO;
self.frame = CGRectMake(0, 0, 65, 100);
self.backgroundColor = [UIColor clearColor];
return self;
}
return nil;
}
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGPoint drawPoint = CGPointMake(0.0f, 0.0f);
UIImage *shadowImage = [UIImage imageNamed:@"shadow_image.png"];
[shadowImage drawAtPoint:drawPoint];
UIImage *frontImage = [UIImage imageNamed:@"front_image.png"];
[frontImage drawAtPoint:drawPoint];
CGContextRestoreGState(context);
}
答えた後、あなたが本当は後ろに引きたかったのだとわかりましたMKPinAnnotationView
。私の答えはそうではありませんが、描画をどこで行うべきかを示しています。明らかMKPinAnnottions
に、ピンとその影を表示するための独自の描画方法があります。
おそらく、self.image プロパティから Pin 画像を取得できると思います。影に関しては、私は確信が持てません... OPEN GL描画メソッドを使用して影を追加するか、単に影の画像を組み合わせている可能性があります。
最後に、画像にはアニメーションが付いています。アニメーションが実行される場所だと思います。ただし、この段階ではまだテストしていません。