iOS 7 Mapkit:MKPolygonRenderer子类 - drawMapRect方法无法绘制文本

时间:2014-09-15 19:37:36

标签: ios objective-c mkoverlay mkpolygonrenderer

我的要求很简单 - 我在地图视图中布置了许多多边形叠加视图。在每一个中我都想要一些文字。我需要根据用户在特定MKPolygon视图上的活动来更改文本和文本格式。

由于我的要求是多边形,我决定将MKPolygonRenderer子类化,因为以下层次结构:

MKPolygonRenderer : MKOverlayPathRenderer : MKOverlayRenderer

我决定继承MKPolygonRenderer,因为我需要不规则形状的区域边界。在他们内部,我需要布置文本。这是我需要帮助的部分。

(好吧,基本上我需要一些非常灵活的东西,如每个多边形内的UILabel,但在这里我正在努力进行最基本的操作)

这是我的MKPolygonRenderer子类实现:

static UIFont * font = nil;

@implementation MyMapOverlayRenderer

-(void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context
{
    MKMapRect theMapRect = [self.overlay boundingMapRect];

    if (!(MKMapRectIntersectsRect(mapRect, theMapRect)))
        return;

    NSString * t= @"Test" ;
    CGRect theRect = [self rectForMapRect:theMapRect];

    CGPoint point = CGPointMake((theRect.origin.x + theRect.size.width)/2, (theRect.origin.y + theRect.size.height)/2);        

    if (!font)
    {
        font = [UIFont fontWithName:@"Helvetica" size:20.0];
    }

    CGContextSaveGState(context);
    CGContextSetTextDrawingMode(context, kCGTextFillStroke); // This is the default

    [[UIColor blackColor] setFill];
    [t drawAtPoint:point withAttributes:@{NSFontAttributeName:font}];

    CGContextRestoreGState(context);
}

@end

不知何故,这里没有文字。

我的其他观察:

  • point包含非常大的值。我尝试用(15,15),(5,5)等替换,但没有成功。如果可能,我希望文本位于多边形的中心。
  • 我不知道我的drawAtPoint代码是否正确。
  • font不是静态的时,我得到了相同的结果。
  • 在我的视图控制器中,我设置了多边形叠加视图的fillColor属性,否则使用MKPolygonRenderer可以正常工作,但不能使用我的派生子类MyMapOverlayRenderer。我看不到多边形的填充颜色。我在哪里可以在子类中设置它?

0 个答案:

没有答案