2015-08-04 2 views
0
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [AnyObject]){ 
    if startLocation == nil { 
     startLocation = locations.first as! CLLocation 
    } 
    else{ 
     let distance = startLocation.distanceFromLocation(locations.last as! CLLocation) 
     let lastDistance = lastLocation.distanceFromLocation(locations.last as! CLLocation) 
     traveledDistance += lastDistance 
     //print("\(startLocation)") 
     //print("\(lastLocation)") 
     //print("\(traveledDistance)") 
     print("\(distance)") 
     distanceLabel.text = "\(distance)" 
    } 
    lastLocation = locations.last as! CLLocation 
} 

Я нашел код выше на stackoverflow и его работе, если я езжу или гуляю в одном направлении, но когда я обернусь и вернусь в исходную точку, distane равен 0m.it быть хорошим, если кто-то может объяснить код подробно или дать мне несколько советов. спасибоБыстрое пройденное расстояние ios 9

+0

Переехал мой комментарий как ответ. – DevAndArtist

ответ

2

Разве это не тривиально? Вы печатаете distance, который рассчитывается снова и снова с startLocation, который никогда не изменится в вашем коде. Если я начну в точке A и перейдите к B (будет некоторое расстояние в метрах), а затем вернитесь к A и вычислите из startLocation (который всегда A) он должен быть равен нулю. : D

Я не пробовал ваш код, но мне кажется, что это происходит. Вместо этого напечатайте traveledDistance, это значение, которое всегда будет увеличиваться по мере передвижения.

Исправьте код так:

print("\(traveledDistance)") 
distanceLabel.text = "\(traveledDistance)" 

Если вам нужно только общее расстояние, я хотел бы изменить код, чтобы выглядеть следующим образом:

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [AnyObject]) { 

    /* for the ever first call the if check should fail because lastLocation is initially nil in your code (I assume) */ 
    if lastLocation != nil { 

     /* this will start adding a distance at the second call of the callback */ 
     traveledDistance += lastLocation.distanceFromLocation(locations.last as! CLLocation) 

     print("\(traveledDistance)") 
     distanceLabel.text = "\(traveledDistance)" 
    } 

    /* here we are saving the current location to our variable for later calculation */ 
    lastLocation = locations.last as! CLLocation 
} 
Смежные вопросы