我有一个地图应用程序,允许用户在地图上绘制形状,如下所示:
这是一个UIView,在MKMapView之上,我使用UIBezierPath创建了形状。我想要做的是将这个UIView转换为MKMapOverlayRendrer。
我就是这样做的:
Subclassed MKMapOverlay,我称之为RWSelectedAreaOverlay: .h文件:
@interface RWSelectedAreaOverlay : NSObject <MKOverlay>
@property(readonly, nonatomic) MKMapRect boundingMapRect;
@property(readonly, nonatomic) CLLocationCoordinate2D coordinate;
// I'm converting the UIView to UIImage and use this property to stick to it.
@property(readonly, strong, nonatomic) UIImage *overlayImage;
- (id)initWithBoundingMapRect:(MKMapRect)aMapRect coordinate:(CLLocationCoordinate2D)aCoordinate
image:(UIImage *)anImage;
@end
这就是我在地图上添加叠加的方式:
MKMapRect mapRect = [self.mapView visibleMapRect];
CLLocationCoordinate2D overlayCenter = self.mapView.centerCoordinate;
RWSelectedAreaOverlay *overlay = [[RWSelectedAreaOverlay alloc] initWithBoundingMapRect:mapRect
coordinate:overlayCenter
image:overlayImage];
[self.mapView addOverlay:overlay level:MKOverlayLevelAboveRoads];
然后我实施了- (MKOverlayRenderer *)rendererForOverlay:(id < MKOverlay >)overlay
来在地图上渲染我的叠加层。
我的实施如下:
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id <MKOverlay>)overlay {
RWSelectedAreaOverlayRenderer *result = [[RWSelectedAreaOverlayRenderer alloc] initWithOverlay:overlay];
if (![overlay isKindOfClass:[RWSelectedAreaOverlay class]]) {
return result;
}
if (![self.mapView isEqual:mapView]) {
return result;
}
RWSelectedAreaOverlay *selectedAreaOverlay = (RWSelectedAreaOverlay *) overlay;
UIImage *image = selectedAreaOverlay.overlayImage;
result.imageFrame = mapView.frame;
result.selection = image;
return result;
}
我的渲染方法可以成功地将叠加层添加到地图中,但由于某些原因,它将其缩小为非常小的图像而不是我创建的完整尺寸图像,而是在左上角显示它! (甚至不确定你是否可以看到图像,它在左上方非常小。
只是想知道是否有人可以帮我解决这个问题。