mapView不使用didUpdateUserLocation进行第二次尝试

Gam*_*Dev 2 mkmapview ios android-mapview

我正在从我的mainviewcontroller按下视图贴图按钮时加载mapviewcontroller:

- (IBAction)mapButton:(id)sender {
    MapKitDisplayViewController *mapKitDisplayView = [[MapKitDisplayViewController alloc] init];
    [self presentModalViewController:mapKitDisplayView animated:YES];   
    [mapKitDisplayView release]; mapKitDisplayView = nil;
}
Run Code Online (Sandbox Code Playgroud)

在启动此地图视图时,将调用此方法,该方法可正确缩放到用户位置:

- (void)mapView:(MKMapView *)myMapView didUpdateUserLocation:(MKUserLocation *)userLocation 
{ 
    myMapView.showsUserLocation = YES;
    NSLog(@"didUpdateUserLocation = '%@'", userLocation);

    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance([userLocation coordinate], 20000, 20000);
    [myMapView setRegion:region animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

我在这个屏幕上有一个完成按钮,可以解除这个视图:

- (IBAction)mapDoneButton:(id)sender 
{    
    [self dismissModalViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)

在此阶段,用户将被带回主视图控制器,但是当我再次按下视图映射按钮时,永远不会调用didUpdateUserLocation方法!因此,地图视图缩小到默认值,并且不会像以前那样放大.

我怎样才能让它再次被召唤?

谢谢

Dee*_*olu 6

MKMapView对象不会自动触发用户位置的更新.您需要通过设置激活搜索showsUserLocation = YES.然后,这将获取用户的位置,然后mapView:didUpdateUserLocation:调用委托方法.因此,请将此值设置为YESon viewWillAppear:,一旦您拥有了用户位置,就可以将其设置NO为停止跟踪用户.如果不这样做,它会定期更新用户位置并调用委托方法.如果不这样做,用户位置应该是不可靠的.

  • 非常感谢迪帕克,哇,你的速度惊人!非常感谢您的帮助.猜猜结果是什么?代码没问题,但问题是我的MKMAPVIEW上的界面构建器我已经勾选了showUserLocation框!:(不敢相信多少悲伤导致我,但多亏了你的测试应用程序,我能够找到它:D (3认同)