Skip to content

Latest commit

 

History

History
106 lines (66 loc) · 2.71 KB

CoreMotionDemo.md

File metadata and controls

106 lines (66 loc) · 2.71 KB

First, import CoreMotion framework.

import CoreMotion

Next, create an instance of CMPedometer.

let pedometer = CMPedometer()

Create a function to set up the pedometer.

func setupPedometer() {

}

Check if step counting is available., and if so, start pedometer updates.

if CMPedometer.isStepCountingAvailable() {
    self.pedometer.startPedometerUpdatesFromDate(midnight) {

    }
}

Calculated property to generate midnight value.

var midnight: NSDate {
    let cal = NSCalendar.autoupdatingCurrentCalendar()
    return cal.startOfDayForDate(NSDate())
}

Fill in handler closure for startPedometerUpdatesFromDate.

pedometerData, pedError in
if pedError != nil {
    // failed
} else {
    // succeeded
}

Update UI with number of steps.

dispatch_async(dispatch_get_main_queue()) {
    self.stepCountLabel.text = "\(pedometerData.numberOfSteps.integerValue) steps"
}

Call setupPedometer() in viewWillAppear.

override func viewWillAppear(animated: Bool) {
    setupPedometer()
    super.viewWillAppear(animated)
}

Be a good citizen and stop pedometer updates in viewWillDisappear.

override func viewWillDisappear(animated: Bool) {
    pedometer.stopPedometerUpdates()
    super.viewWillDisappear(animated)
}

Run.

Let's calculate distance. In success block, get distance in meters.

let meters = pedometerData.distance.doubleValue
let distanceFormatter = NSLengthFormatter()

Update UI for distance.

self.distanceLabel.text = "\(distanceFormatter.stringFromMeters(meters))"

Run.

Let's calculate our rate. Because the Pedometer returns cumulative data from our start date, we need to calculate the time and distance diffs manually.

Create lastDistance and lastUpdatedDate property.

var lastDistance = 0.0
var lastUpdatedDate = NSDate()

Calculate time and distance deltas. This goes between distanceFormatter and lastDistance.

let timeDelta = pedometerData.endDate.timeIntervalSinceDate(self.lastUpdatedDate)
let distanceDelta = meters - self.lastDistance
let rate = distanceDelta / timeDelta

self.lastUpdatedDate = NSDate()
self.lastDistance = meters

Update UI in dispatch_async closure.

self.rateLabel.text = "\(distanceFormatter.stringFromMeters(rate)) / s"

Run.

Add last updated date. First, a date formatter property.

let dateFormatter = NSDateFormatter()

Initialize the dateFormatter in viewDidLoad.

dateFormatter.dateStyle = NSDateFormatterStyle.ShortStyle
dateFormatter.timeStyle = NSDateFormatterStyle.MediumStyle

Update UI in dispatch_async closure.

self.lastUpdatedLabel.text = "Last updated: \(self.dateFormatter.stringFromDate(pedometerData.endDate))"

Run.