2

注釈が追加された後に実行される次の MKMapView メソッドを実装しました。Interface Builder で MKMapView マップ (parishMap) を「ユーザーの場所を表示」に設定しています。マップビューを読み込むと、マップビューに常に 1 秒ほどで青い点が表示されます。

Map View コントローラーの実装にあるコードは次のとおりです。

// Center map on user location (initially)
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
    for(MKAnnotationView *annotationView in views) {
        if(annotationView.annotation == parishMap.userLocation) {
            MKCoordinateRegion region;
            MKCoordinateSpan span;

            span.latitudeDelta=0.03;
            span.longitudeDelta=0.03;

            CLLocationCoordinate2D location=parishMap.userLocation.coordinate;

            location = parishMap.userLocation.location.coordinate;

            region.span=span;
            region.center=location;

            [parishMap setRegion:region animated:TRUE];
            [parishMap regionThatFits:region];
        }
    }
}

iPhone 4 でマップビューを開くと、マップビューは常に (そしてほぼ即座に) userLocation ドットの中央に移動します。ただし、iPhone 3Gs または iPod Touch (2010) でマップ ビューを開くと、userLocation が中央に表示されず、マップ ビューに設定したデフォルトのズーム/領域のままになります。

このコードが iPhone 4 以外のデバイス (すべて 4.2.x 最新の iOS を実行している) で機能しない理由について何か考えはありますか?

4

2 に答える 2

2

これはおそらく、これらのさまざまなデバイスで GPS が位置をロックするのにかかる時間の問題です。

CLLocationManager とそのデリゲート メソッドを使用してマップを中央に配置することをお勧めします。

CLLocationManager のインスタンスを作成し、そのデリゲート プロパティを self に設定してから、以下を実装することで、場所の更新を開始できます。

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation

最新の場所の更新に基づいて、マップを中央に配置できる場所。

于 2011-02-23T23:26:14.140 に答える
-1

このコードを使用してマップを中央に配置しようとしましたか:

[mapView setCenterCoordinate:location animated:YES];

iPhone 4 では機能するのに他の機能では機能しない理由はわかりませんが、これはリージョンを調整するために使用するコードです。

    MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(location, 0.03, 0.03);
    MKCoordinateRegion adjustedRegion = [mapView regionThatFits:viewRegion];

    [mapView setRegion:adjustedRegion animated:YES];

そのように試してみて、それがどのように機能するかを確認してください。regionThatFits メソッドを実行している方法は、実際にはメソッドの使用方法ではありません。コードの最後の行をコメントアウトしてみてください。違いはありません。とにかく、先ほど紹介した方法で試してみて、ご不明な点があればお知らせください。

于 2011-02-23T22:57:43.963 に答える