使用MKMapView的showShowsUserLocation方法而不显示视图

时间:2015-03-27 07:27:37

标签: ios

您可能知道,在中国使用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开始定位当前位置而不在屏幕上显示?

1 个答案:

答案 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:,因为尚未模拟用户位置。

为此,请附加断点并模拟某个位置以触发对委托功能的调用。

enter image description here

希望这会有所帮助。感谢。