MKAnnotationView をサブクラス化して、基本的に drawRect のオーバーライドによってマップ ビュー上のポイントの周りに円を描く注釈を作成しました。円は次の状況でうまく描画されます (シミュレーターで):
- マップ ビューの初期ロード時
- スワイプ時、ただしタッチが終了する前にスワイプ モーションが停止した場合のみ (タッチが終了した後にマップが「惰走」しないようにするため)
- ピンチズーム時
次のいずれかのアクションが発生すると、円は消えます。
- タッチが終わった後、マップが「惰性で進む」場所をスワイプ
- ダブルタップズーム
サークルが消えた後、「ワーキング」グループのアクションのいずれかが実行されると、サークルが再び表示されます。
何が原因でしょうか? 私は描画/表示/レイアウトの専門家ではありません (率直に言って、obj C や iPhone の専門家でもありません)。
これは、私の MKAnnotationView サブクラスから最も関連性が高いと思われる、わずかに簡略化されたコードです。
- (void)drawRect:(CGRect)rect {
// Drawing code
[self drawCircleAtPoint:CGPointMake(0,0) withRadius:self.radiusInPixels andColor:self.circleAnnotation.color];
}
- (void)drawCircleAtPoint:(CGPoint)p withRadius:(int)r {
CGContextRef contextRef = UIGraphicsGetCurrentContext();
float alpha = 0.75;
CGContextSetRGBFillColor(contextRef, 255, 0, 0, alpha);
CGContextSetRGBStrokeColor(contextRef, 255, 0, 0, alpha);
// Draw a circle (border only)
CGContextStrokeEllipseInRect(contextRef, CGRectMake(0, 0, 2*r, 2*r));
}