0

我只是覆盖了 MKOverlay,所以我正在寻找 Apple 开发人员示例代码中的良好实践......当我看到这个时:

    // bite off up to 1/4 of the world to draw into.
    MKMapPoint origin = points[0];
    origin.x -= MKMapSizeWorld.width / 8.0;
    origin.y -= MKMapSizeWorld.height / 8.0;
    MKMapSize size = MKMapSizeWorld;
    size.width /= 4.0;
    size.height /= 4.0;
    boundingMapRect = (MKMapRect) { origin, size };
    MKMapRect worldRect = MKMapRectMake(0, 0, MKMapSizeWorld.width, MKMapSizeWorld.height);
    boundingMapRect = MKMapRectIntersection(boundingMapRect, worldRect);

许多问题

  • 为什么苹果在计算好的 boundingMapRect 后会与 worldRect 相交?
  • 通过安全?
  • boundingMapRect inter worldRect 并不总是 boundingMapRect ?
  • 如果我有两个 MKMapPoint 代表我的 CGRect,我不必这样做,对吗?

问候,


编辑

所以我必须这样做?

// set the smallest rectangle which able to contain this overlay
MKMapPoint leftTopPoint = MKMapPointForCoordinate(leftTopCorner);
MKMapPoint rightBottomPoint = MKMapPointForCoordinate([self bottomRightCoord]);

boundingMapRect = MKMapRectMake(leftTopPoint.x, leftTopPoint.y,
                                fabs(leftTopPoint.x - rightBottomPoint.x),
                                fabs(leftTopPoint.y - rightBottomPoint.y));
4

1 回答 1

1

该代码来自 Breadcrumb 示例,与大多数叠加层相比,它可能有点不寻常,因为它是动态更新的。他们实际上将边界区域设置为世界区域的四分之一,这本身有点不寻常,通常你会期望它要小得多。我认为交集只是为了确保生成的矩形绝对在整个世界矩形内。我不确定我是否会推荐此代码作为最佳实践,除非您正在做类似的事情(即创建动态覆盖)。如果您在不间断地环游世界,或者甚至只是穿越国际日期变更线时运行面包屑应用程序,大概甚至可能会发现这段代码......

于 2013-03-29T15:33:17.350 回答