XCode:无缝保持位置更新
Posted
技术标签:
【中文标题】XCode:无缝保持位置更新【英文标题】:XCode: Seamlessly persist location updates 【发布时间】:2016-11-01 11:13:30 【问题描述】:我正在制作一个涉及跟踪用户位置的 ios 应用程序。无论用户在哪个视图控制器中,我都希望跟踪位置。有没有办法获得这种恒定的位置跟踪效果,而不必在每次用户移动到新的视图控制器时关闭/打开位置更新?我需要某种单例吗?
【问题讨论】:
@boraseoksoon 停止在每一个问题中添加“提前致谢” - 问题中不应该添加致谢,而您现在已经对许多问题做到了。 【参考方案1】:在其他对象类中实现 locationManager 委托,而不是在 ViewController 中。然后,在这个对象内部,创建包含位置的 var,并在所有视图控制器中使用这个 var。您可以将此对象用作单例或在控制器之间传递它。
【讨论】:
【参考方案2】:有几种使用位置管理器及其代表的做法。有人说最好的方法是在应用程序委托中实现位置管理器,其他人在控制模型对象位置时在视图控制器中使用它。
我更喜欢像 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.
现在,您可以从各种视图控制器调用所有公共属性和方法来开始更新位置、获取值并停止更新位置。我已经这样做了,它为我节省了维护代码的很多麻烦,因为我所有的位置代码都在一个类中。
缺点是您的类可能会变得非常大并且难以维护。对我来说,这还没有发生。
希望这会有所帮助。
【讨论】:
以上是关于XCode:无缝保持位置更新的主要内容,如果未能解决你的问题,请参考以下文章
更新 SimpleCursorAdapter,同时保持 ListView 中的滚动位置