NEW: Master Swift design patterns with my latest book! >>

How to use Core Motion to read accelerometer data

Written by Paul Hudson    @twostraws

Core Motion makes it ridiculously easy to read the accelerometer from iPhones and iPads, and it even takes care of managing how the accelerometer and gyroscope work together to report orientation. To get started import the Core Motion framework like this:

import CoreMotion

Now create a property that can store a CMMotionManager, like this:

var motionManager: CMMotionManager!

When you're ready to start reading accelerometer data (this will be inside viewDidLoad() for most people), go ahead and create your motion manager then call its startAccelerometerUpdates() method:

motionManager = CMMotionManager()
motionManager.startAccelerometerUpdates()

Finally, read the accelerometer data as often as you want. It's optional, though, so make sure you unwrap it carefully.

For example, if you want to change the gravity of a SpriteKit physics world so that tipping your device makes things roll around, you'd look for something like this in your update() method:

if let accelerometerData = motionManager.accelerometerData {
    physicsWorld.gravity = CGVector(dx: accelerometerData.acceleration.y * -50, dy: accelerometerData.acceleration.x * 50)
}

Available from iOS 4.0 – see Hacking with Swift tutorial 26

Did this solution work for you? Please pass it on!

Other people are reading…

About the Swift Knowledge Base

This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.

Get my latest video for free

Learn about value types, functional programming, and protocol-oriented programming in this new video – it's free!

Click here to visit the Hacking with Swift store >>