2

MKmapの座標と領域を設定しようとしています。私が書いたコードは、viewDidAppearに配置すると機能しますが、ビューが表示されるたびに設定されたくないので、このメソッドには含めたくありません。

これは、これらのメソッドに実装しようとしているコードです

//set the map delegate
MapView.delegate = (id)self;

//set the co-ords
CLLocationCoordinate2D zoomLocation;
zoomLocation.latitude = LAT_POSN;
zoomLocation.longitude= LON_POSN;

//create region
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, startZoom, startZoom);
MKCoordinateRegion adjustedRegion = [MapView regionThatFits:viewRegion];
[MapView setRegion:adjustedRegion animated:YES];

編集:startZoomは定数であり、リージョンを設定する前にそこにあることを確認するためにログに記録しました

使ってみました

if (self.isMovingToParentViewController )

ビューが最初に呼び出されたときにこれを実行するために、それでも同じ結果が表示されます。

これはそれがどのように見えるべきかです。

次のようになります

しかし、これは私が得ているものです。

悪い画像

なぜこれが起こるのか誰かが知っていますか?ありがとう

回答:tkanzakicの回答を使用しました。コードの一部が1回だけ使用されたことを確認するためです。また、リージョンが設定されなかった理由は、このコード行が気に入らなかったためです。

MKCoordinateRegion adjustedRegion = [MapView regionThatFits:viewRegion];
4

2 に答える 2

1

ここでの問題は、の呼び出しにあり-[MKMapView regionThatFits:]ます。

マップビューの領域を設定する場合、ビューは通常、領域を境界内に正しく収まるように少し調整する必要があります。通常、指定した領域のアスペクト比は、たとえば実際のビューのアスペクト比と一致しません。

設定する前に調整された領域を本当に知る必要がある場合は、を使用できます-[MKMapView regionThatFits:]。これを早すぎる場合(たとえば、でviewDidLoad)の問題は、マップビューが画面上の独自のサイズに従って「適合する領域」を計算することです。自動レイアウトの場合、実際のレイアウトが行われるまで、そのサイズは正しくないか、意味がない可能性があります。したがって、viewDidLoadが呼び出されたとき、マップビューはおそらくその正しい実際のサイズをまだ認識していません。

コードからは、adjustedRegionをマップビューに戻す以外は、あまり長く保持しているようには見えません。したがって、それを省略して、代わりにこれを行うことができます。

[mapView setRegion:viewRegion animated:NO];

次に、マップビューは必要に応じてその領域を調整します。後で調整された領域が何であるかを知る必要がある場合は、後でマップビューにその領域を要求できます(viewDidAppear:またはレイアウトが行われた後の別の時間)。

それがお役に立てば幸いです。

于 2013-01-28T15:03:20.810 に答える
0

このコードがメソッドで機能しない理由はわかりませんがviewDidLoad、ビューが表示されるたびにコードが起動されるのを防ぐために、静的変数(または、使用したくない場合は属性またはプロパティ)を含めることができます。静的変数)、このように:

- (void)viewDidAppear:(BOOL)animated
{
    static BOOL isFirstLoad = YES;
    if (isFirstLoad) {
        // Put your code here
        isFirstLoad = NO;
    }

    [super viewDidAppear:animated];
}

これにより、コードが1回だけ実行されることが保証されます。

于 2013-01-28T11:51:54.197 に答える