2016-08-23 2 views
1

Ich möchte die Geschwindigkeit, mit der das Gerät fährt, in einem einfachen Etikett anzeigen können.Anzeige der Geschwindigkeit, mit der das Gerät CLLocationSpeed ​​fährt

Ich habe dies auf Äpfel Website:

var Geschwindigkeit: CLLocationSpeed ​​{get}

source

Der obige Code setzt Geschwindigkeit in m/s und ich kann es daher konvertieren Meilen pro Stunde usw.

Wie kann ich diesen Code verwenden, um die Geschwindigkeit anzuzeigen?

Ich weiß, das kann getan werden, weil Snapchat es als Filter hat.

+2

Willkommen bei StackOverflow! Hast du schon etwas probiert? Normalerweise kommen Sie auf diese Website mit konkreten Fragen und fragen nicht, wie Sie bestimmte Bibliotheken verwenden sollen. – Orin

+0

Danke für die schnelle Antwort! Ich habe versucht, Dinge wie aktuelle Orte zu verwenden und habe gesucht, was endlos um das Internet scheint, kann aber nichts über die Anzeige von Geschwindigkeit finden. – key9060

Antwort

2

fand ich das hier auf SO von @Leo

Swift: Exception while trying to print CLLocationSpeed "unexpectedly found nil while unwrapping an Optional value" :

import UIKit 
import CoreLocation 
class ViewController: UIViewController, CLLocationManagerDelegate { 
let locationManager = CLLocationManager() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    locationManager.delegate = self 
    if NSString(string:UIDevice.currentDevice().systemVersion).doubleValue > 8 { 
     locationManager.requestAlwaysAuthorization() 
    } 
    locationManager.desiredAccuracy=kCLLocationAccuracyBest 
    } 

    func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { 
    var speed: CLLocationSpeed = CLLocationSpeed() 
    speed = locationManager.location.speed 
    println(speed); 
    } 

    func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) { 
    if status != CLAuthorizationStatus.Denied{ 
     locationManager.startUpdatingLocation() 
    } 
    } 
} 

dann in Ihrem viewDidLoad, oder wo auch immer Sie das Etikett machen:

 myLabel = UILabel() 
     myLabel.text  = "MySpeed: \(speed)" 
     self.addChild(myLabel) 

einfach machen Stellen Sie sicher, dass die Variable 'speed' immer dort ist, wo Sie sie benutzen wollen (ich habe das nicht demonstriert).

Es kompiliert für mich. Hoffe das hilft. Ich habe es vorher nicht benutzt, aber mit der Suchfunktion bin ich zuversichtlich, dass ich hier fast alles lernen kann: D

+0

Vielen Dank! Ich werde dich in wenigen Augenblicken über das Ergebnis informieren! – key9060

+0

oh warte ich habe einen Teil mit dem Etikett vergessen, halte an einer Sekunde – Fluidity

+0

Ich habe einen Teil zum Etikett hinzugefügt, ich habe vergessen zu initialisieren und zu deklarieren. 'myLabel \t = \t UILabel()' Funktioniert jetzt – Fluidity

2

Das könnte mehr sein als das, was Sie suchen, aber sollte hoffentlich helfen.

import UIKit 
import MapKit 
import CoreLocation 

class ViewController: UIViewController, CLLocationManagerDelegate { 
    //MARK: Global Var's 
    var locationManager: CLLocationManager = CLLocationManager() 
    var switchSpeed = "KPH" 
    var startLocation:CLLocation! 
    var lastLocation: CLLocation! 
    var traveledDistance:Double = 0 
    var arrayMPH: [Double]! = [] 
    var arrayKPH: [Double]! = [] 

    //MARK: IBoutlets 
    @IBOutlet weak var speedDisplay: UILabel! 
    @IBOutlet weak var headingDisplay: UILabel! 
    @IBOutlet weak var latDisplay: UILabel! 
    @IBOutlet weak var lonDisplay: UILabel! 
    @IBOutlet weak var distanceTraveled: UILabel! 
    @IBOutlet weak var minSpeedLabel: UILabel! 
    @IBOutlet weak var maxSpeedLabel: UILabel! 
    @IBOutlet weak var avgSpeedLabel: UILabel! 

    //MARK: Life Cycle 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     minSpeedLabel.text = "0" 
     maxSpeedLabel.text = "0" 
     // Ask for Authorisation from the User. 
     self.locationManager.requestAlwaysAuthorization() 

     // For use in foreground 
     self.locationManager.requestWhenInUseAuthorization() 
     if CLLocationManager.locationServicesEnabled() { 
      locationManager.delegate = self 
      locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters 
      locationManager.startUpdatingLocation() 
     } 


    } 


    // 1 mile = 5280 feet 
    // Meter to miles = m * 0.00062137 
    // 1 meter = 3.28084 feet 
    // 1 foot = 0.3048 meters 
    // km = m/1000 
    // m = km * 1000 
    // ft = m/3.28084 
    // 1 mile = 1609 meters 
    //MARK: Location 
    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     let location = locations.last 
     if (location?.horizontalAccuracy > 0) { 
      updateLocationInfo(location!.coordinate.latitude, longitude: location!.coordinate.longitude, speed: location!.speed, direction: location!.course) 
     } 
     if lastLocation != nil { 
      traveledDistance += lastLocation.distanceFromLocation(locations.last!) 
      if switchSpeed == "MPH" { 
       if traveledDistance < 1609 { 
        let tdF = traveledDistance/3.28084 
        distanceTraveled.text = (String(format: "%.1f Feet", tdF)) 
       } else if traveledDistance > 1609 { 
        let tdM = traveledDistance * 0.00062137 
        distanceTraveled.text = (String(format: "%.1f Miles", tdM)) 
       } 
      } 
      if switchSpeed == "KPH" { 
       if traveledDistance < 1609 { 
        let tdMeter = traveledDistance 
        distanceTraveled.text = (String(format: "%.0f Meters", tdMeter)) 
       } else if traveledDistance > 1609 { 
        let tdKm = traveledDistance/1000 
        distanceTraveled.text = (String(format: "%.1f Km", tdKm)) 
       } 
      } 
     } 
     lastLocation = locations.last 

    } 

    func updateLocationInfo(latitude: CLLocationDegrees, longitude: CLLocationDegrees, speed: CLLocationSpeed, direction: CLLocationDirection) { 
     let speedToMPH = (speed * 2.23694) 
     let speedToKPH = (speed * 3.6) 
     let val = ((direction/22.5) + 0.5); 
     var arr = ["N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW"]; 
     let dir = arr[Int(val % 16)] 
     //lonDisplay.text = coordinateString(latitude, longitude: longitude) 

     lonDisplay.text = (String(format: "%.3f", longitude)) 
     latDisplay.text = (String(format: "%.3f", latitude)) 
     if switchSpeed == "MPH" { 
      // Chekcing if speed is less than zero or a negitave number to display a zero 
      if (speedToMPH > 0) { 
       speedDisplay.text = (String(format: "%.0f mph", speedToMPH)) 
       arrayMPH.append(speedToMPH) 
       let lowSpeed = arrayMPH.minElement() 
       let highSpeed = arrayMPH.maxElement() 
       minSpeedLabel.text = (String(format: "%.0f mph", lowSpeed!)) 
       maxSpeedLabel.text = (String(format: "%.0f mph", highSpeed!)) 
       avgSpeed() 
//    print("Low: \(lowSpeed!) - High: \(highSpeed!)") 
      } else { 
       speedDisplay.text = "0 mph" 
      } 
     } 

     if switchSpeed == "KPH" { 
      // Checking if speed is less than zero 
      if (speedToKPH > 0) { 
       speedDisplay.text = (String(format: "%.0f km/h", speedToKPH)) 
       arrayKPH.append(speedToKPH) 
       let lowSpeed = arrayKPH.minElement() 
       let highSpeed = arrayKPH.maxElement() 
       minSpeedLabel.text = (String(format: "%.0f km/h", lowSpeed!)) 
       maxSpeedLabel.text = (String(format: "%.0f km/h", highSpeed!)) 
       avgSpeed() 
//    print("Low: \(lowSpeed!) - High: \(highSpeed!)") 
      } else { 
       speedDisplay.text = "0 km/h" 
      } 
     } 

     // Shows the N - E - S W 
     headingDisplay.text = "\(dir)" 

    } 

    func avgSpeed(){ 
     if switchSpeed == "MPH" { 
      let votes:[Double] = arrayMPH 
      let votesAvg = votes.reduce(0, combine: +)/Double(votes.count) 
      avgSpeedLabel.text = (String(format: "%.0f", votesAvg)) 
      //print(votesAvg) 
     } else if switchSpeed == "KPH" { 
      let votes:[Double] = arrayKPH 
      let votesAvg = votes.reduce(0, combine: +)/Double(votes.count) 
      avgSpeedLabel.text = (String(format: "%.0f", votesAvg)) 
      //print(votesAvg 
     } 
    } 

    //MARK: Buttons 
    @IBOutlet weak var switchSpeedStatus: UIButton! 
    @IBAction func speedSwtich(sender: UIButton) { 
     if switchSpeed == "MPH" { 
      switchSpeed = "KPH" 
      switchSpeedStatus.setTitle("KPH", forState: .Normal) 
     } else if switchSpeed == "KPH" { 
      switchSpeed = "MPH" 
      switchSpeedStatus.setTitle("MPH", forState: .Normal) 
     } 
    } 

    @IBAction func restTripButton(sender: AnyObject) { 
     arrayMPH = [] 
     arrayKPH = [] 
     traveledDistance = 0 
     minSpeedLabel.text = "0" 
     maxSpeedLabel.text = "0" 
     headingDisplay.text = "None" 
     speedDisplay.text = "0" 
     distanceTraveled.text = "0" 
     avgSpeedLabel.text = "0" 
    } 

    @IBAction func startTrip(sender: AnyObject) { 
     locationManager.startUpdatingLocation() 
    } 


    @IBAction func endTrip(sender: AnyObject) { 
     locationManager.stopUpdatingLocation() 
    } 




} 
Verwandte Themen