2

私はマップビューを使用していますが、マップを開いたときにユーザーの場所にズームすることがありますが、海の真ん中にズームすることもあります。何が原因なのかわかりません。これはズームに使用しているコードです。マップでユーザーを追跡したくありませんが、ユーザーがマップを開いたときにその場所にズームするだけです

-(void) viewDidAppear:(BOOL)animated{

MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(self.mapView.userLocation.coordinate, 600.0f, 600.0f);
[self.mapView setRegion:region animated:YES];

 }

 -(void) viewDidLoad{

[super viewDidLoad];

self.mapView.delegate = self;
[self.mapView setShowsUserLocation:YES];

 }
4

2 に答える 2

3

以前にこの問題に遭遇しました。mapView の読み込みとユーザーの位置の検出が遅い場合があるため、マップ ビューがユーザーの位置を確認する前にviewDidAppearコードが実行されることがあります。したがって、海のスポット。

準備ができたら、mapView のデリゲートを使用してユーザーの位置を表示することをお勧めします。

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    if(isShowUserLocation)
    {
        MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 600.0, 600.0);
        [self.mapView setRegion:[self.mapView regionThatFits:region] animated:YES];
        isShowUserLocation = NO;
    }
}

で設定isShowUserLocation = YESviewDidLoadます。これにより、ユーザーの場所が入力時に一度だけ表示され、必要なときに選択的に表示されるようになります。

編集1:

@implementation MapViewController
{
    BOOL isShowUserLocation;
}

-(void) viewDidLoad
{
    [super viewDidLoad];
    self.mapView.delegate = self;
    [self.mapView setShowsUserLocation:YES];
    isShowUserLocation = YES;
}

編集2:

または、CLLocationManager を使用します。この投稿を参照してください。更新を停止できます。CoreLocation.framework を含めてください。ただし、CLLocationManager と MapView をやり取りするときに、いくつかの核心的な問題を処理する必要がある場合があります。

于 2014-03-30T05:04:36.233 に答える