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 대신 MKAnnotation (원형 이미지 또는 원 그리기)을 사용해도 상관 없으면 특수 효과 뷰의 애니메이션을 부드럽게 처리 할 수 있습니다. 예를 들어 http://stackoverflow.com/questions/8564013/animate-removal-of-annotations를 참조하십시오. 주석이있는 문제는 이미지/그림이 일정한 크기 (예 : 사용자 위치 파란색 점)를 유지한다는 것입니다. – Anna