0

起動時に特定の場所を中心とするアプリがあります。

//Calculate and set new center point
CLLocationCoordinate2D zoomLocation = CLLocationCoordinate2DMake(<some lat>,<some long>);

MKCoordinateSpan span;
span.latitudeDelta = 0.08;
span.longitudeDelta = 0.08;

//MKCoordinateRegion region = MKCoordinateRegionMake(zoomLocation, span);
MKCoordinateRegion region = [mapView regionThatFits:MKCoordinateRegionMake(zoomLocation, span)];

[mapView setRegion:region animated:YES];
[self refreshMap];

refreshMap を呼び出すと、マップの境界ボックスの計算が試みられるため、それぞれの情報についてデータベースにクエリを実行できます。

//Calculate map's bounding box
MKMapRect mapRect = [mapView visibleMapRect];

MKMapPoint cornerPointNE = MKMapPointMake(MKMapRectGetMaxX(mapRect), mapRect.origin.y);
CLLocationCoordinate2D upperLeft = MKCoordinateForMapPoint(cornerPointNE);

MKMapPoint cornerPointSW = MKMapPointMake(mapRect.origin.x, MKMapRectGetMaxY(mapRect));
CLLocationCoordinate2D lowerRight = MKCoordinateForMapPoint(cornerPointSW);

if( fabs(upperLeft.longitude) > 80.00 || fabs(lowerRight.longitude) > 80.0) {
    return;
}

私が見ている問題は、iOS 6 では、アプリの起動時に lowerRight 座標が正しく計算されず、lowerRight.longitude が > 80.0 であるためマップ データが更新されないことです。upperLeft は正しく計算されます。

アプリの読み込みが完了した後、マップを少しでもパンすると、バウンディング ボックスの計算が正しくなります。

このコードは iOS 5 で正常に動作します。

mapView:regionDidChangeAnimated 以外に使用できるコールバックはありますか? refreshMap の残りの部分はかなり集約的であり、パンのパフォーマンスに影響を与えたくありません。

ティア

アップデート

私は修正を見つけたようです。これを行う代わりに

[mapView setRegion:region animated:YES];

イエスをノーに変えた

[mapView setRegion:region animated:NO];

アプリの起動時に下隅が正しく計算されるようになりました。

4

1 に答える 1

1

MKMapRectOffset または Inset を使用して、目に見える四角形をわずかに移動しましたか。

また、私はあなたの質問を読み直していますが、間違っているかもしれません。でも、NEコーナーは右上コーナー、SWコーナーは左下コーナーになると思います。一方、NW と SE のコーナーが必要です。

mapRect の原点が左上隅にあることを Map Kit リファレンスで確認できませんでした。

于 2012-10-28T15:28:42.027 に答える