停止在用户位置更新上更新地图 - Google Maps iOS SDK

时间:2016-12-26 04:09:46

标签: ios swift google-maps key-value-observing

然而,每当用户将地图的相机更新移动到其位置时,我的应用就会在用户的位置启动。我希望它加载到他们的位置,但随后允许他们自由浏览地图,即使他们的位置正在移动。与Google地图应用中显示的行为类似。我正在使用KVO来收集viewDidLoad()函数中的位置。那条线看起来像这样:

mapView.isMyLocationEnabled = true
self.mapView.addObserver(self, forKeyPath: "myLocation", options: NSKeyValueObservingOptions.new, context: nil)

这是我的观察功能代码:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {

    guard let update = change, let myLocation = update[NSKeyValueChangeKey.newKey] as? CLLocation else {
        print("Location not found")
        return
    }

    self.mapView.camera = GMSCameraPosition.camera(withTarget: myLocation.coordinate, zoom: 14)

}

需要更改以使其符合上述标准。

2 个答案:

答案 0 :(得分:1)

使用this帮助程序代码,您可以获取用户的位置并设置目标,如:

CLLocationManager *manager = [CLLocationManager updateManagerWithAccuracy:50.0 locationAge:15.0     authorizationDesciption:CLLocationUpdateAuthorizationDescriptionAlways];
    [self.manager startUpdatingLocationWithUpdateBlock:^(CLLocationManager *manager, CLLocation *location, NSError *error, BOOL *stopUpdating) {
    self.mapView.camera = GMSCameraPosition.camera(withTarget: location.coordinate, zoom: 14)
}]; 

如果你没有'想要使用上面的帮助程序代码,那么您也可以获得用户的位置using Core Location basic api

请注意,每次更改用户的位置时,您的代码都会调用observeValue,从而导致为用户的位置图设置相机。

答案 1 :(得分:0)

在Sunil上面的回答的帮助下,我想出了如何解决这个问题。

Sunil指出,每次更新用户的位置时,应用都会调用observeValue()。因此,基于我在observeValue()中的代码,这将有意义mapView相机每次用户的位置更新时都会更新。

我通过移动来解决问题

self.mapView.camera = GMSCameraPosition.camera(withTarget: myLocation.coordinate, zoom: 14)

到另一个函数,如viewDidAppear()

有些人可能会问为什么我没有将其移至viewDidLoad(),因为在viewDidAppear()之前调用了viewDidLoad()。应用程序在viewDidLoad()结束前不会获取用户的位置。因此,将相机声明放在viewDidAppear()的末尾并不会给应用程序足够的时间来获取用户位置。通过在observeValue()函数中声明相机位置,我们为应用程序提供了足够的时间来处理用户的位置并获取它。

注意:请确保将您的位置变量从viewDidAppear()函数中传出,以便在Intent foo = new Intent(this, viewContacts.class); 中使用。