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()
}
}
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
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