我正在尝试在MKMapView上绘制一些包含文本的圆形叠加层。
我将MKCircleView子类化,在其中放入了以下内容(基于this),但未显示该文本。圆圈正确显示。 (也尝试了第一个响应的解决方案,结果相同)。

-(void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context {
   [super drawMapRect:mapRect zoomScale:zoomScale inContext:context];
   NSString * t= @"XXXXX\nXXXX" ;
   UIGraphicsPushContext(context);
   CGContextSaveGState(context);
   [[UIColor redColor] set];
   CGRect overallCGRect = [self rectForMapRect:[self.overlay boundingMapRect]];
   NSLog(@"MKC :  %lf, %lf ----> %lf , %lf ", mapRect.origin.x ,mapRect.origin.y , overallCGRect.origin.x, overallCGRect.origin.y);
   [t drawInRect:overallCGRect withFont:[UIFont fontWithName:@"Arial" size:10.0] lineBreakMode:UILineBreakModeClip alignment:UITextAlignmentCenter];
   CGContextRestoreGState(context);
   UIGraphicsPopContext();
}

调试时,我会得到像这样的值
MKC :  43253760.000000, 104071168.000000 ----> 1.776503 , 1.999245
MKC :  43253760.000000, 104071168.000000 ----> -1.562442 , -2.043090

他们正常吗?我想念什么?

谢谢。

最佳答案

我相信您的代码可以正常工作,问题在于文本没有正确缩放,使其不可见。

使用zoomScale函数根据MKRoadWidthAtZoomScale缩放字体大小:

[t drawInRect:overallCGRect withFont:[UIFont fontWithName:@"Arial"
    size:(10.0 * MKRoadWidthAtZoomScale(zoomScale))]
    lineBreakMode:UILineBreakModeClip alignment:UITextAlignmentCenter];

另外,请确保使用与基础圆的颜色不同的文本颜色。

请注意,使用drawInRect将导致文本限于圆内,并且可能会被截断。如果要始终显示所有文本,则可以改用drawAtPoint

10-04 23:38