2016-04-04 13 views
0

Ich möchte die Reisezeit eines sich bewegenden Objekts mit swift 2.2 finden, wenn der Benutzer das Objekt verfolgt. Ich habe die locationManager-Funktion geschrieben, um den Standort und die Entfernung des sich bewegenden Objekts zu verfolgen, aber ich muss die Reisezeit finden?Reisezeit berechnen CLLocation Swift

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    userLocations.append(locations[0] as CLLocation) 

    if startLocation == nil { 
     startLocation = locations.first! as CLLocation 
    } else { 
     let distance = startLocation.distanceFromLocation(locations.last! as CLLocation)/1000 
     let lastDistance = lastLocation.distanceFromLocation(locations.last! as CLLocation)/1000; 

     vartraveledDistance += lastDistance 
     print("\(startLocation)") 
     print("\(locations.last!)") 
     print("FULL DISTANCE: \(traveledDistance)") 

     print("STRAIGHT DISTANCE: \(distance)") 
    } 
    lastLocation = locations.last! as CLLocation 
} 


@IBAction func StartTrip(sender: AnyObject) { 
    print("Start Trip") 
    locationManager.startUpdatingLocation() 
} 

@IBAction func StopTrip(sender: AnyObject) { 
    print("End Trip") 
    locationManager.stopUpdatingLocation() 
    traveledDistance.text = String(format:"%f km", self.vartraveledDistance) 
} 
+0

Die meisten Grund: Zeit = Abstand/Geschwindigkeit – Darko

+2

Was ist das eigentliche Problem hier? Notieren Sie sich eine Zeit in "StartTrip" scheint einfach zu sein? – zcui93

Antwort

0

Sie können die startdate speichern, wenn Sie die Startlocation gesetzt und NSDate timeIntervalSinceDate Methode verwenden, um die Reise verstrichene Zeit zu berechnen:

zuerst fügen Sie ein Objekt und startdate eine berechnete Eigenschaft auf Ihren view-Controller:

var startDate: NSDate! 
var traveledTime: Double { return NSDate().timeIntervalSinceDate(startDate) } 

dann die startdate gesetzt, nachdem Sie Einstellung r Startlocation:

if startLocation == nil { 
    startLocation = locations.first 
    startDate = NSDate() 
    // code ... 
} 

eine Erweiterung erstellen Sie Ihre Zeit zu formatieren mit NSDateComponentsFormatter:

extension NSTimeInterval { 
    struct DateComponents { 
     static let formatterPositional: NSDateComponentsFormatter = { 
      let dateComponentsFormatter = NSDateComponentsFormatter() 
      dateComponentsFormatter.unitsStyle = .Positional 
      dateComponentsFormatter.allowedUnits = [.Hour,.Minute,.Second] 
      dateComponentsFormatter.zeroFormattingBehavior = .DropLeading 
      return dateComponentsFormatter 
     }() 
    } 
    var positionalTime: String { 
     return DateComponents.formatterPositional.stringFromTimeInterval(self) ?? "" 
    } 
} 

Jetzt können Sie nur die traveledTime überprüfen:

print("travel elapsed time: \(traveledTime.positionalTime)") 
0

Meine Antwort wird in obj-c sein, da ich noch nicht schnell gelernt habe :). Aber du wirst die Idee bekommen.

In dieser Klasse von Ihnen können Sie 2 Termine erstellen:

NSDate *startDate; 
NSDate *stopDate; 

Und dann in Ihrem startTrip Methode initialisieren die startdate:

startDate = [NSDate date]; 

und in stopTrip die stopDate initialisieren und die Reisezeit berechnen :

Auch wenn Sie MKMaps verwenden, in MKDirections Klasse th ere ist ein Verfahren

-(void)calculateETAWithCompletionHandler:(MKETAHandler)completionHandler 

in dem Sie die geschätzte Zeit berechnen reisen