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

たくさんの質問

  • Apple が適切な boundingMapRect を計算した後に worldRect と交差するのはなぜですか?
  • セキュリティで?
  • boundingMapRect inter worldRect は常に boundingMapRect であるとは限りませんか?
  • CGRect を表す 2 つの MKMapPoint がある場合、それを行う必要はありません。

よろしく、


編集

だから私はこのようにしなければなりませんか?

// 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 サンプルからのものです。彼らは実際には境界領域を世界の領域の 4 分の 1 に設定していますが、これはそれ自体が少し珍しいことであり、通常ははるかに小さいと予想されます。交差点は、結果の四角形が完全な世界の四角形の内側に確実にあることを確認するためのものだと思います。同様のことをしている場合 (つまり、動的オーバーレイを作成する場合) でない限り、このコードをベスト プラクティスとして推奨するかどうかはわかりません。おそらく、世界中をノンストップで飛び回っているときに Breadcrumb アプリを実行したり、国際日付変更線を越えたりすると、このコードでさえも見抜かれる可能性があります...

于 2013-03-29T15:33:17.350 に答える