MKOverlayPathView
とすると、テキストを追加する最も簡単な方法は、drawMapRect:zoomScale:inContext:
を上書きし、パスとテキストの描画をそこに置くことです(何もしないか、createPath
を実装しないでください)。
とにかくdrawMapRect
を使用する場合は、MKOverlayPathView
の代わりにMKOverlayView
というプレーンのサブクラス化に切り替えることをおすすめします。 MKOverlayView
で
、drawMapRect:zoomScale:inContext:
メソッドをオーバーライドしCGContextAddArc
(又はCGContextAddEllipseInRect
又はCGPathAddArc
)を使用して円を描きます。
このメソッドでは、drawAtPoint
を使用してテキストを描画することができます。この場合、必要なのはcontext
です。例えば
:関連するMKOverlay
変化の別の答えにコメントに関連して
-(void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context
{
//calculate CG values from circle coordinate and radius...
CLLocationCoordinate2D center = circle_overlay_center_coordinate_here;
CGPoint centerPoint =
[self pointForMapPoint:MKMapPointForCoordinate(center)];
CGFloat radius = MKMapPointsPerMeterAtLatitude(center.latitude) *
circle_overlay_radius_here;
CGFloat roadWidth = MKRoadWidthAtZoomScale(zoomScale);
//draw the circle...
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
CGContextSetFillColorWithColor(context, [[UIColor blueColor] colorWithAlphaComponent:0.2].CGColor);
CGContextSetLineWidth(context, roadWidth);
CGContextAddArc(context, centerPoint.x, centerPoint.y, radius, 0, 2 * M_PI, true);
CGContextDrawPath(context, kCGPathFillStroke);
//draw the text...
NSString *text = @"Hello";
UIGraphicsPushContext(context);
[[UIColor redColor] set];
[text drawAtPoint:centerPoint
withFont:[UIFont systemFontOfSize:(5.0 * roadWidth)]];
UIGraphicsPopContext();
}
...
中心座標や半径(または何でも)、あなたはMKOverlayView
を作ることができますオーバーレイをもう一度削除して追加する代わりに、setNeedsDisplayInMapRect:
を呼び出して「移動」します。 MKOverlayPathView
を使用する場合は、代わりにinvalidatePath
を呼び出すことができます。
setNeedsDisplayInMapRect:
を呼び出すときは、マップのrectパラメータのオーバーレイのboundingMapRect
を渡すことができます。 WWDC 2010からLocationRemindersサンプルアプリで
、オーバーレイビューは、関連するMKOverlay
に変化を観察するためにKVOを使用し、それが円のプロパティの変更を検出するたび自体が移動しますが、あなたは他の方法の変化を監視し、setNeedsDisplayInMapRect:
を呼び出すことができますオーバーレイビューの外側から明示的に
(別の答えにコメントで私はMKOverlayPathView
を使用して言及を行なったし、それがLocationRemindersアプリが移動サークルオーバーレイビューを実装する方法である。しかし、私はあなたにも、円を描くようにMKOverlayView
を使用することができますどのように言及している必要があります。については申し訳ありませんそれ)
おかげアンナが...私は、円を描くようにMKOverlayPathViewを使用しましたし、それが正常に動作します:
だから、私にとって、それはこのように終わりました。私はビューの移動をアニメートする必要がある。現時点では、地図上のデフォルトのユーザーマーカーは、場所が変更されたときにアニメーション表示されます。したがって、私の円のビューもアニメ化されるべきです。私は[UIView beginAnimationsと[UIView commitAnimations]を使用する必要があることを知っています。私はこのコードをどこに置くべきかわかりません。 MKOverlayPathViewでinvalidatePathの前後に配置する必要がありますか? – user836026
通常、ビューをアニメーション化するには、beginAnimations/commitAnimations(またはブロックベースのanimateWithDuration)を使用しますが、これはMKOverlayViewsでは機能しません(少なくとも私は方法はわかりません)。ただし、MKOverlayの代わりにMKnnotation(円のイメージまたは円の描画)を使用しても構わない場合は、注釈ビューをスムーズにアニメートできます。たとえば、http://stackoverflow.com/questions/8564013/animate-removal-of-annotationsを参照してください。注釈の問題は、画像/図面が一定のサイズ(ユーザーの場所の青い点のような)のままであることだけです。 – Anna