1

iOSアプリにマップを配置し、次のように設定しました。

- (void)viewDidLoad {
    [super viewDidLoad];

    CLLocationCoordinate2D cord = {.latitude = 44.508473, .longitude =  11.375828};

    [self.myMap setRegion:MKCoordinateRegionMake(cord, MKCoordinateSpanMake(.005, .005)) animated:YES];


    AddressAnnotation * annotazione = [[AddressAnnotation alloc] init];

    [annotazione setCoordinate:cord];
    [self.myMap addAnnotation:annotazione];
}

およびAddressAnnotation.m:

- (void)setCoordinate:(CLLocationCoordinate2D)coord {
    coordinate = coord;
}

それは機能しますが、最初にマップのビューを開くと、南極海の近くのゾーンが表示され(ピンヘッドは座標になりますが、マップは南極海のゾーンを示します)、マップのビューを閉じて再度開くと、正確に私のピンが表示されます。

最初に開いたときにピンを拡大して地図を表示するにはどうすればよいですか?

どうもありがとう!

4

1 に答える 1

1

このコードには何の問題もありません。coordinate私はおそらくあなたのプロパティを定義しAddressAnnotation、コンパイラに適切なセッターを合成させ、カスタムセッターを取り除くようにしますが、それはおそらくあなたが説明する問題とは無関係です...そのようにするのは簡単です、それは確実にアノテーションcoordinateはKVOなどに準拠します。

ビューコントローラをマップビューのデリゲートとして定義してから、以下を実装することをお勧めしますregionDidChangeAnimated

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    NSLog(@"%s %f, %f %d", __FUNCTION__, mapView.region.center.latitude, mapView.region.center.longitude, animated);
}

が何に設定されているかを知ることは有用かもしれませんregionし、何が起こっているのかをリバースエンジニアリングできるかもしれません。

しかし、結論として、問題は質問に含めたコードとは無関係であり、問​​題は間違いなく他の場所にあります。


あなたのプロジェクトでこれを行うことにより、私は次のログを見ました:

2013-03-30 23:11:12.326 iBo [25408:c07]-[POIMapController mapView:regionDidChangeAnimated:] -47.422141、0.000000 0
2013-03-30 23:11:12.328 iBo [25408:c07]-[POIMapController mapView:regionDidChangeAnimated:] 44.508473、11.375828 0
2013-03-30 23:11:12.328 iBo [25408:c07]-[POIMapController mapView:regionDidChangeAnimated:] -47.422141、0.000000 0
2013-03-30 23:11:12.329 iBo [25408:c07]-[POIMapController mapView:regionDidChangeAnimated:] -47.422141、0.000000 0

したがって、明らかにリージョンの設定が行われていますが、その後リージョンをリセットする何かがあります。少し遊んでみると、この動作は自動レイアウトを使用した場合にのみ現れることがわかりました。自動レイアウトをオフにすると、この動作はなくなり、期待どおりに機能します。

viewDidLoadまたは、コードを移動して領域を外に設定し(ビュー作成プロセスのかなり早い段階(ビューが作成された後、表示される前)に配置すると、機能することに気付きましviewDidAppearた。

于 2013-03-24T19:21:35.867 に答える