6

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));
}
4

1 に答える 1