0

我希望有人可以为我指出一个方便的委托方法来回答以下问题。

我的问题是:我怎么知道用户第一次被 MapKit 定位?

当我的视图出现时,我会告诉我的 MKMapView 定位用户并设置用户周围的地图区域。在最初找到用户后,我不想继续将地图更新到他/她的位置。我想让用户自由地在地图上平移,而不是自动回到他们的位置。

当定位用户出现延迟时我遇到了麻烦(例如,用户第一次打开应用程序时,MapKit 在他/她同意分享他们的位置之前不会定位用户)。结果是地图在大西洋上空的某个地方打开,一旦找到用户,它就不会自行纠正。

不幸的是, -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation 在确定用户的真实位置之前被调用了几次(测试时,我在同意分享我的位置之前看到了它的 NSLog 语句)。

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.mapView.delegate=self;
}

-(void)viewWillAppear:(BOOL)animated{
    [self.mapView setShowsUserLocation:YES];
    [self.mapView setUserTrackingMode: MKUserTrackingModeNone];

    hasUpdatedRegion=NO;
}


//MapKit Delegate Methods
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    NSLog(@"didUpdateUserLocation");

    if(!hasUpdatedRegion)
    {
        hasUpdatedRegion=YES;
        MKCoordinateSpan span=MKCoordinateSpanMake(0.3, 0.3);
        MKCoordinateRegion currentRegion=MKCoordinateRegionMake(mapView.userLocation.coordinate, span);
        [mapView setRegion:currentRegion];
    }
}

-(void)mapView:(MKMapView *)mapView didChangeUserTrackingMode:(MKUserTrackingMode)mode animated:(BOOL)animated{
    NSLog(@"didChangeTrackingMode");

}
4

2 回答 2

2

我也有同样的问题。换了个方式...

- (void)viewDidLoad
{
    self.mapView.userTrackingMode = YES;
}

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    self.mapView.userTrackingMode = NO;
}

首先,设置userTrakingModeYES在用户移动时跟踪用户。

其次,在将地图更新为用户位置后didUpdateUserLocation,当我禁用了跟踪模式时。

这会阻止地图再跟踪用户。

于 2013-07-09T09:19:04.007 回答
0

你为什么不尝试设置 mapview 区域,以便显示整个世界地图而不是特定位置(如你所说的“大西洋”),以防用户不允许 mapkit 使用当前位置(我意思是在视图中确实加载方法,设置地图区域。),如果他允许..然后根据用户的坐标设置区域,。

于 2012-07-02T11:47:18.747 回答