MKMap不从OverlayRenderer请求超过3个纵向切片

时间:2016-02-03 14:13:57

标签: ios mkmapview mkoverlay

我使用了苹果面包屑样本,对其进行了调整,并在我的代码中产生了奇怪的效果。

- (void)drawMapRect:(MKMapRect)mapRect
      zoomScale:(MKZoomScale)zoomScale
      inContext:(CGContextRef)context

被调用尽可能多的瓷砖以覆盖从北到南,但它从不要求从东到西超过3个瓷砖。所以它永远不会涵盖广泛的覆盖。

瓷砖内部的所有内容都是正确绘制的,即使用

也不会再调用任何请求的地图
- (BOOL)intersectsMapRect:(MKMapRect)mapRect {
    return YES;
}

中心坐标位于边界中间。

    // init of   CrumbPath : NSObject <MKOverlay>
    upper = CLLocationCoordinate2DMake(49.0, 10.0);
    lower = CLLocationCoordinate2DMake(48.0, 5.0);

    _coordinate = CLLocationCoordinate2DMake(48.5, 7.5);

    MKMapPoint upperLeft = MKMapPointForCoordinate(upper);
    MKMapPoint lowerRight = MKMapPointForCoordinate(lower);

    _boundingMapRect = MKMapRectMake(upperLeft.x,
                                      upperLeft.y,
                                      lowerRight.x - upperLeft.x,
                                      lowerRight.y - upperLeft.y);

截至http://imgur.com/lc5KpTT

1 个答案:

答案 0 :(得分:0)

MapKit无法处理负尺寸的MKMapRect。所有来自CGRects和绘图WORK的计算,但是如果大小是负的,那么地图本身将不会请求正确的MapRects,因为它将它们视为大小为0.

所以使用'abs'它会起作用

_boundingMapRect = MKMapRectMake(upperLeft.x,
                                  upperLeft.y,
                                  fabs(lowerRight.x - upperLeft.x),
                                  fabs(lowerRight.y - upperLeft.y));