2014-10-02 95 views
0

我正在从负载中的设备获取位置(lat \ long),但它每次都返回不同数量的坐标(每个坐标在1和5之间)。我刚刚进入Swift,我想我错过了一些东西,但我一直没有找到任何东西在这个需要使用.stopUpdatingLocation()CLLocationManager返回多个坐标

我想我可能会错过在Swift中的东西,但我我不确定是什么。

var locationManager = CLLocationManager() 


override func viewDidLoad() { 
    super.viewDidLoad() 

    if(CLLocationManager .locationServicesEnabled()){ 
     locationManager.delegate = self 
     locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters 
     locationManager.requestWhenInUseAuthorization() 
     locationManager.startUpdatingLocation() 
    } 
} 


func locationManager(manager: CLLocationManager!, didUpdateLocations locations:[AnyObject]!) { 
      var locationArray = locations as NSArray 
      var locationObj = locationArray.lastObject as CLLocation 
      var coord = locationObj.coordinate 
      self.locationManager.stopUpdatingLocation() 

      println(coord.latitude) 
      println(coord.longitude) 
    } 

回答

0

这是用Objective-C和Android的同样的事情,那完全是平常。这些数字将自动迅速稳定下来。

我通常做的是计算两次连续更新之间的变化,一旦变化非常小 - 这意味着当时我得到了正确的坐标。

顺便说一下,一旦它稳定下来,我总是会减少位置更新的频率以节省能源。

+0

PeiGuo - 所以这是由于在viewDidLoad中运行?当我从触摸或滑动中运行相同的代码时,我只会得到一组经纬度。只是在移动到viewDidLoad时才开始这样做。 – InsertOldUserIDHere 2014-10-07 19:06:46

+0

只有当您最初开始接收位置更新时,才会发生这种情况,此时您将首先收到一群不正确的数据。一旦稳定下来,它在同样的运行过程中保持稳定。由于ViewDidLoad是,我猜,在所有触摸等之前,这在ViewDidLoad中发生并不意外。毕竟,它与任何特定的方法无关,而是与时间顺序有关。 – 2014-10-07 19:57:07