起動時に特定の場所を中心とするアプリがあります。
//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];
アプリの起動時に下隅が正しく計算されるようになりました。