在MKMapView上将标记绘制为叠加

时间:2015-12-12 21:56:49

标签: ios objective-c mkmapview mapkit

我想在国家边界上画一个国家的旗帜。我正在使用here

中的坐标数据

我添加叠加层的方式是

[mapView addOverlays:countryName];

然后将其渲染为

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay
{
  if ([overlay isKindOfClass:[MKPolygon class]])
  {
    MKPolygonRenderer *renderer = [[MKPolygonRenderer alloc] initWithPolygon:overlay];
    renderer.fillColor      = [ColorUtil colorFromHexString:@"#EE5A43" withAlpha:0.6];
    renderer.strokeColor = [[UIColor whiteColor] colorWithAlphaComponent:1.0];
    renderer.lineWidth   = 2;
    return renderer;
  }
  return nil;
}

现在我的想法是用旗帜绘制叠加层。所以我继承了MKPolygonRenderer并添加了

@implementation MyMKOverlayRenderer
- (instancetype)initWithOverlay:(id<MKOverlay>)overlay overlayImage:(UIImage *)overlayImage {
  self = [super initWithOverlay:overlay];
  if (self) {
    _overlayImage = overlayImage;
  }

  return self;
}
- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context {
  CGImageRef imageReference = self.overlayImage.CGImage;

  MKMapRect theMapRect = self.overlay.boundingMapRect;
  CGRect theRect = [self rectForMapRect:theMapRect];

  CGContextScaleCTM(context, 1.0, -1.0);
  CGContextTranslateCTM(context, 0.0, -theRect.size.height);
  CGContextDrawImage(context, theRect, imageReference);
}
@end

现在检查两张附加的图像。我期待旗子在多边形的边界内。但看起来并没有发生。所以可能我的方法是错的。有些专家可以帮助我找到正确的方向。

without drawing flag

drawing flag

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。关键是要创建一个UIBezierPath并剪切叠加图像。

我已发布整个解决方案here

现在看起来像

enter image description here