为什么Apple这样做:MKMapRectIntersection(boundingMapRect,worldRect)?

时间:2013-03-29 14:39:38

标签: iphone ios mapkit mkoverlay

我只是重写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);

很多问题

  • 为什么Apple在计算好边界MapRect后会与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));

1 个答案:

答案 0 :(得分:1)

该代码来自Breadcrumb示例,与大多数叠加相比,它可能有点不寻常,因为它是动态更新的。它们实际上将边界区域设置为世界区域的四分之一,这本身有点不寻常,通常你会期望它要小得多。我认为交叉点只是为了确保生成的rect肯定在整个世界中。我不确定除非你做类似的事情(即创建动态叠加层),否则我建议将此代码作为最佳实践。据推测,如果您在世界各地不停地飞行时运行面包屑应用程序,或者甚至只是越过国际日期线,这个代码甚至可能会被抓住......