您可能知道,在中国使用CLLocationManager定位是不准确的。但是,Apple在MKMapView中包含一个移位功能,因此从中获取的坐标是正确的。
现在我想使用纯MKMapView的定位功能来获取当前位置。以下是我的代码:
在我的LocationManager的init函数中:
self.mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
self.mapView.delegate = self;
self.mapView.showsUserLocation = YES;
在mapView的委托方法中:
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation {
NSLog(@"%@", userLocation.location);
}
现在问题来了。如果我不将mapView添加到rootViewControler的视图中,则没有任何反应,mapView将不会执行定位,即我必须调用以下代码:
[self.view addSubview:[FTLocationManager sharedManager].mapView];
在我的根视图控制器的[viewDidLoad:]方法中让mapView工作。
我尝试以编程方式创建一个UIViewController并将mapView添加到其视图中,但仍然没有任何反应。
我猜MKMapView只会在屏幕上显示时才开始定位当前用户。
有没有办法触发MKMapView开始定位当前位置而不在屏幕上显示?
答案 0 :(得分:0)
如果您不想在屏幕上显示,可以将mapView添加到某个视图中。看我的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIView *aView = [[UIView alloc] initWithFrame:self.view.bounds];
self.mapView = [[MKMapView alloc] initWithFrame:aView.bounds];
self.mapView.delegate = self;
self.mapView.showsUserLocation = YES;
[aView addSubview:_mapView];
}
上面的代码将添加mapView,但如果您在模拟器上进行测试,则不会调用委托方法didUpdateUserLocation:
,因为尚未模拟用户位置。
为此,请附加断点并模拟某个位置以触发对委托功能的调用。
希望这会有所帮助。感谢。