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 中的滚动位置

用高分辨率替换低分辨率图像时保持完全相同的缩放位置

从更新面板异步回发后保持滚动位置

在保持位置的同时更新 Shiny DataTable 的行

UITableView 在更新 NSFetchedResultsController 时保持滚动在正确的位置

如何保持自己的应用和关联的第三方框架同步更新?