我制作的ios应用程序涉及跟踪用户的位置。无论用户使用什么视图控制器,我都希望跟踪位置。有没有办法获得这种恒定的位置跟踪效果,而无需每次用户移动到新的viewcontroller时关闭/打开位置更新?我需要某种单身人士吗?
答案 0 :(得分:0)
在其他对象类中实现locationManager委托,而不是在ViewController中。然后,在此对象内创建包含位置的var,并在所有视图控制器中使用此var。您可以将此对象用作单例或在控制器之间传递它。
答案 1 :(得分:0)
使用位置管理器及其代理有几种做法。有人说最好的方法是在应用程序委托中实现位置管理器,其他人在控制模型对象位置时在视图控制器中使用它。
我更喜欢像Damian Dudycz建议的那样,为该位置使用单独的模型类。这不需要是单身人士。例如,您定义了一个类,它为您提供应用程序所需的所有特定于位置的信息。此类具有您的应用程序中特定于位置的需求所需的必要属性和方法。接下来,您可以在项目功能的后台启用位置更新。
然后你最终会得到一个类:
class myLocationClass: NSObject, CLLocationManagerDelegate {
//Properties
var myLocations = [CLLocations]()
var myGeocodeName = ""
var myDistanceCovered = 0.0
var myLocationManager : CLLocationManager? //You can also make this lazy to prevent optional properties
var ... etc.
然后,您可以在此类中放置相同的CLLocation特定方法,例如:
func getLocationName(from location: CLLocation) {
//Your reverse geocoding code here.
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
//Your location update stuff here.
}
从各种视图控制器中,您现在可以调用所有公共属性和方法来开始更新位置,获取值并停止更新位置。我已经这样做了,它为我节省了很多令人头疼的代码,因为我的所有位置代码都在一个类中。
缺点是你的班级可能会变得很大而且难以维持。对我来说,这还没有发生。
希望这有帮助。