LoginSignup
10
12

More than 5 years have passed since last update.

XCode8 Swift3 で iOS 9.3 用加速度センサー値取得のサンプルアプリ

Last updated at Posted at 2016-10-22
  • iOSで加速度センサーの値を取得するには、CoreMotionを使う
  1. XCodeでSingle View Applicationを作成

CoreMotionでaccelerationを取得

  1. ViewController.swift で CoreMotionをImportしてaccelerationを取得する
ViewController.swift
import UIKit
import CoreMotion

class ViewController: UIViewController {

    // MotionManager
    let motionManager = CMMotionManager()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        if motionManager.isAccelerometerAvailable {
            // 加速度センサーの値取得間隔
            motionManager.accelerometerUpdateInterval = 0.1

            // motionの取得を開始
            motionManager.startAccelerometerUpdates(to: OperationQueue.current!, withHandler: { (data, error) in
                // 取得した値をコンソールに表示
                print("x: \(data?.acceleration.x) y: \(data?.acceleration.y) z: \(data?.acceleration.z)")
            })
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

XCode8で iOS10.0 が対象になったこともあり..
実機に入れようとして、deployment target を iOS9.3 にすると以下のようなエラーが出る

AppDelegate.swift:49:35: 'NSPersistentContainer' is only available on iOS 10.0 or newer

プロジェクトをXcode7 で作って Xcode8 へマイグレーションすればいける!ってかいてある。...が、ここは 今回 CoreData を使う予定はないので(Project作成時に入れなければ関係ないが, 入れてしまった.) 以下のように回避した。

全く本質を解決していない(iOS10.0以外ではCoreData使えなくしてる)ので...どうななんだろうか..

@available(iOS 10.0, *)
lazy var persistentContainer: NSPersistentContainer = {
    let container = NSPersistentContainer(name: "MotionBLESample")
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error as NSError? {
                fatalError("Unresolved error \(error), \(error.userInfo)")
            }
        })
        return container
    }()

    // MARK: - Core Data Saving support

    func saveContext () {
        if #available(iOS 10.0, *) {
            let context = persistentContainer.viewContext

            if context.hasChanges {
                do {
                    try context.save()
                } catch {
                    let nserror = error as NSError
                    fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
                }
            }
        } else {
            // Fallback on earlier versions
        }
    }

こうやった上で、実機で動かす。
スクリーンショット 2016-09-14 23.59.36.png

動きました。

10
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
12