1

よくわかりません。私はMKMapViewを持っており、viewDidLoadメソッドで次のことを行います。

- (void)viewDidLoad {
    mainDelegate = (PublicArtOmahaAppDelegate*)[[UIApplication sharedApplication]delegate]; 

    XMLController  *myXMLController = [[XMLController alloc] init]; 
    [myXMLController parse];
    mapView.showsUserLocation = YES;
    [self gotoLocation];

    // add annotations to map
    [self.mapView addAnnotations:mainDelegate.mapAnnotations];
    [myXMLController release];
}

[self gotoLocation]呼び出し:

- (void)gotoLocation
{
    MKCoordinateRegion newRegion;

    CLLocation *userLocation = mapView.userLocation.location;
    float latitude = userLocation.coordinate.latitude;
    float longitude = userLocation.coordinate.latitude;
    newRegion.center.latitude = latitude;
    newRegion.center.longitude = longitude;

    [self.mapView setRegion:newRegion animated:YES];
}

そのため、mapViewが読み込まれたときに地図をユーザーの場所の中央に配置する必要があると考えました。また、ユーザーが必要なときにユーザーの場所を更新するために手動でgotoLocationを再度呼び出すボタンを画面に実装することも計画していました。

しかし...私がデバイスでアプリを実行すると、アフリカ西部の海のパッチを中心とした地図が読み込まれます。これは明らかに緯度が高く、長さが0,0です。奇妙だと思ったのは、実際の場所にズームバックすると、現在地が注釈として正しく配置されていたということです。では、gotoLocationでユーザーの場所を設定する方法に何か問題があると思いますか?誰かが私が間違っていることに気づきましたか?

4

2 に答える 2

3

MKUserLocationドキュメントから:

位置

デバイスの現在の場所。(読み取り専用)

@property (readonly, nonatomic) CLLocation *location

討論

マップビューに現在ユーザーの場所が表示されていない場合、またはユーザーの場所がまだ決定されていない場合、このプロパティにはnilが含まれます。

MKMapView(またはCLLocationManager)がユーザーの場所の修正を取得するのに数秒かかり、比較的正確な修正を取得するのに数回の試行が必要になる場合があります。最善の策は、CLLocationManagerオブジェクトを作成し、それにデリゲートを割り当ててから、locationManager:didUpdateToLocation:fromLocation:メソッドが起動したときにマップをズームすることです。

于 2011-05-13T19:41:05.870 に答える
0

span地域にも設定する必要があります。のような任意の値に設定しますlatitudeDelta = 0.01(と同じですlatitudeDelta)。

また、gotoLocation内部から電話をかけ– locationManager:didUpdateToLocation:fromLocation:ます(ロケーションマネージャーを使用している場合)。そうすれば、有効なユーザーの場所がある場合にのみ呼び出すことができます。

于 2011-05-13T20:00:49.460 に答える