23

このコードは、 の指定された位置を中心にデフォルトのズーム レベルを設定しますviewDidLoad。コードは以前のバージョンの iOS で正常に動作します。

CLLocationDistance visibleDistance = 100000; // 100 kilometers
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, visibleDistance, visibleDistance);
MKCoordinateRegion adjustedRegion = [mapView regionThatFits:region];
.
.
.
[mapView setRegion:adjustedRegion animated:NO];

ただし、緯度が ~ 75 (>75.1) を超える場所の iOS6 では、次のメッセージが表示されてアプリがクラッシュします。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'Invalid Region <center:nan, nan span:nan, nan>'

特定のズーム レベルでは、内部mapViewで適切な値を設定できないことがわかりました。は、すべての値を として返します。変数を直接使用すると、デフォルト マップ (全世界) が表示されるだけです。MKCoordinateRegion[mapView regionThatFits:region]nanregion

いくつかのテストの後、 を調整することでvisibleDistance、コードが正しく機能することがわかりました。魔法の距離は 20 キロメートルをわずかに超えているようです (一連の緯度と latitudeDelta 値の場合、22 から 23 km の間のどこか)。これは北緯でのみ発生します (-80 で問題なく動作します)。

マップは、最初の配置後に任意の場所で機能します。Apple が可視マップ領域の初期化方法を変更したようです。回避策として、影響を受ける領域のズーム レベルを高くしています。それを適切に機能させる他の方法はありますか?

4

4 に答える 4

5
CLLocationCoordinate2D southwest, northeast;
southwest.latitude = 34.172684;
southwest.longitude = -118.604794;
northeast.latitude = 34.236144;
northeast.longitude = -118.500938;
BSForwardGeocoderCoordinateBounds *bounds = [BSForwardGeocoderCoordinateBounds boundsWithSouthWest:southwest northEast:northeast];

これを試して....

于 2012-11-07T09:37:27.750 に答える
5
CLLocationDistance visibleDistance = 100000; // 100 kilometers
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, visibleDistance, visibleDistance);
MKCoordinateRegion adjustedRegion = [mapView regionThatFits:region];
.
.
.
[mapView setRegion:adjustedRegion animated:NO];

それが動作します..

于 2012-11-07T08:43:44.283 に答える
4

iPhone4S でクラッシュが発生し、コンソールで地域の nan 値が明らかになりました。SO からの約 7 つの異なるソリューションと Apple DTS からのさまざまな提案を試した後、 regionThatFits 呼び出しを削除することで解決しました。私は単に使用しました:

CLLocationDistance visibleDistance = 100000; // 100 kilometers
MKCoordinateRegion adjustedRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, visibleDistance, visibleDistance);

[_mapView setRegion:adjustedRegion animated:YES];

どうやらその regionThatFits メソッドに問題があるようです。

于 2012-12-12T03:54:19.423 に答える