2

基本上,当我的应用程序第一次启动时,会出现启用位置服务提示。当用户点击允许时,我想开始更新用户位置并放大该区域。

在我的 viewDidLoad 中,我启动了位置管理器,但不幸的是,在用户有机会点击允许之前加载了视图。在应用程序的第二次启动时一切正常,因为用户已经允许位置服务

我的问题是如何捕获点击允许的事件,以便我可以运行代码来放大某个区域?

我试过使用-(void)locationManager:didChangeAuthorizationStatus:,但当用户点击允许时,它似乎没有调用这个委托方法。

希望这是有道理的,我对此很陌生。

4

3 回答 3

5

据我所知,您不能,但您不必捕获此事件,因为在获得该位置的坐标之前,您将无法缩放到某个位置。您的应用在第二次启动时运行良好,因为它从第一次启动时就使用缓存的位置数据。因此,您需要在收到新的有效坐标后运行缩放代码。如果您使用 CLLocationManager,请查看

– locationManager:didUpdateToLocation:fromLocation: 

在其代表中。如果用户拒绝使用位置服务,您的代表将收到

locationManager:didFailWithError:

有相应的错误。

如果你使用 MKMapKit,比在 MKMapView 委托实现方法中

– mapViewWillStartLocatingUser: 

专注于当前用户位置。处理拒绝工具

– mapView:didFailToLocateUserWithError:

对应 Apple 文档的链接:

CLLocationManager

CLLocationManagerDelegate

MKMapViewDelegate

于 2012-06-17T20:55:22.313 回答
1

在这里它工作得很好。我启动位置管理器,然后设置它的委托并启动它。当允许的弹出窗口出现时,将-(void)locationManager:didChangeAuthorizationStatus:调用CLAuthorizationStatus等于kCLAuthorizationStatusNotDetermined。如果我点击“不允许”,它会再次被调用,CLAuthorizationStatus等于kCLAuthorizationStatusDenied。当点击“允许”时,它被称为CLAuthorizationStatus等于kCLAuthorizationStatusAuthorized。检查您的委托是否设置正确。

于 2012-08-21T20:18:06.890 回答
1

你可以这样处理:

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{

    switch([CLLocationManager authorizationStatus])
    {
        case kCLAuthorizationStatusAuthorized:
            NSLog(@"Location services authorised by user");
            break;

        case kCLAuthorizationStatusDenied:
            NSLog(@"Location services denied by user");
            break;

        case kCLAuthorizationStatusRestricted:
            NSLog(@"Parental controls restrict location services");
            break;

        case kCLAuthorizationStatusNotDetermined:
            NSLog(@"Unable to determine, possibly not available");
            break;
    }
}
于 2013-05-16T10:05:05.780 回答