MKOverlayRenderer缩小叠加图像

时间:2014-05-21 00:26:00

标签: ios objective-c mapkit mkoverlay

我有一个地图应用程序,允许用户在地图上绘制形状,如下所示: enter image description here

这是一个UIView,在MKMapView之上,我使用UIBezierPath创建了形状。我想要做的是将这个UIView转换为MKMapOverlayRendrer。

我就是这样做的:

  1. 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
    
  2. 这就是我在地图上添加叠加的方式:

    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;
    }
    

    我的渲染方法可以成功地将叠加层添加到地图中,但由于某些原因,它将其缩小为非常小的图像而不是我创建的完整尺寸图像,而是在左上角显示它! (甚至不确定你是否可以看到图像,它在左上方非常小。

    enter image description here

    只是想知道是否有人可以帮我解决这个问题。

0 个答案:

没有答案