2016-04-04 18 views
0

ユーザーがオブジェクトの追跡を開始するときに、swift 2.2を使用して移動するオブジェクトの移動時間を探したいと思います。移動オブジェクトの位置と移動距離を追跡するlocationManager関数を書きましたが、移動時間を見つける必要がありますか?移動時間の計算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

最も基本的な:時間=距離/スピード – Darko

+2

をここで本当の問題は何ですか? 'StartTrip'の時間をメモしておくのは簡単でしょうか? – zcui93

答えて

0

を旅行する推定時間を計算することができます方法

-(void)calculateETAWithCompletionHandler:(MKETAHandler)completionHandler 

です最初に、startDateオブジェクトと計算されたプロパティをビューコントローラに追加します。

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

次に、設定した後にstartDateを設定しますRのstartLocation:

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

が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) ?? "" 
    } 
} 

今、あなただけのtraveledTimeをチェックすることができます。

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

回答は私がまだ素早く学んでいないため、obj-cになります:)しかし、あなたはそのアイデアを得るでしょう。

NSDate *startDate; 
NSDate *stopDate; 

そしてあなたstartTripメソッドでたstartDate初期化:あなたのこのクラスで

あなたは2つの日付を作成することができます

startDate = [NSDate date]; 

とstopDateを初期化し、旅行時間を算出しstopTripで

:MKDirectionsクラス番目でも

stopDate = [NSDate date]; 
NSTimeInterval interval = [startDate timeIntervalSinceDate:stopDate]; 
NSLog (@"Travel time = %.0f seconds", interval); 

あなたがMKMapsを使用している場合は、

:EREは、あなたがあなたがstartLocationを設定するときたstartDateを保存して、旅の経過時間を計算するNSDate timeIntervalSinceDateメソッドを使用することができます