Для группового проекта, над которым я работаю в школе, мне нужно было выяснить, какое решение лучше всего подойдет для нашего приложения. В этом блоге я поделюсь своими выводами о CMPedometer от Core Motion.
Core Motion - это инструмент, предоставляемый Apple, который позволяет получить доступ к сопроцессору движения в iPhone 5S и более поздних версиях. Он обрабатывает данные от встроенного акселерометра, гироскопа и компаса телефона. iPhone 6 и новее также имеют доступ к барометру. В последней версии этот процессор известен как M9.
Сопроцессор iPhone M9 всегда отслеживает эти данные и временно сохраняет их для использования. Важно отметить, что Core Motion одновременно хранит только текущий 7-дневный период. Вот некоторые из доступных данных на основе фитнеса:
CMPедометр
CMPedometer позволяет получить доступ к пешеходным мероприятиям. Это включает в себя количество шагов, расстояние, количество этажей (подъем по лестнице), темп и частоту шагов. Вы можете проверить, доступны ли эти данные, используя методы фреймворка:
//Start by importing CoreMotion import CoreMotion //Create an instance of CMPedometer let pedometer = CMPedometer()
Теперь вы можете использовать шагомер, чтобы проверить, есть ли на устройстве следующие данные, показанные в фрагменте кода ниже. Обратите внимание: всегда полезно проверить, доступны ли данные, прежде чем пытаться их запросить.
//These return BOOL values that tell you if the device has this data available: pedometer.isStepCountingAvailable() pedometer.isDistanceAvailable() pedometer.isFloorCountingAvailable() pedometer.isPaceAvailable() pedometer.isCadenceAvailable() //Apple Documentation
Теперь мы можем запросить экземпляр CMPedometer в течение заданного периода времени и получить доступ к данным, полученным обратно в обработчике завершения.
//Create a NSCalendar let calendar = NSCalendar.currentCalendar() //create an NSDate that is the time period for yesterday let yesterday = calendar.dateByAddingUnit(.Day, value: -1, toDate: NSDate(), options: []) //Safely unwrap the optional NSDate if let today = today { //Use the NSDate to get the data from the CMPedometer instance for yesterday till the current moment pedometer.queryPedometerDataFromDate(yesterday, toDate: NSDate()) { data, error in //Unwrap the data and make sure we didn't run into an error guard let activityData = data where error == nil else { print("There was an error getting the data: \(error)") return } //prints out step count print("Steps: \(activityData.numberOfSteps)") //print out optional distance in of walking and running in meters print("Distance \(activityData.distance)") //print out optional floors ascended print("Floors ascended: \(activityData.floorsAscended)") //print out optional floors descended print("Floors descended \(activityData.floorsDescended)") } }
Пример вывода может выглядеть так:
Steps: 14457 Distance Optional(11546.85863591393) Floors ascended: Optional(7) Floors descended Optional(7)
Вы также можете начать отслеживать живую сессию:
//Calls the pedometer to start live updating the data from a specific date. In this case, for the data when it is called. It will regularly call this method until you ask it to stop. pedometer.startPedometerUpdatesFromDate(NSDate()) { data, error in guard let activityData = data where error == nil else { print("There was an error getting the data: \(error)") return } //You can than do something with the data that is being provided back. print("Steps: \(activityData.numberOfSteps)") print("Distance: \(activityData.distance)") print("Floors ascended: \(activityData.floorsAscended)") print("Floors descended: \(activityData.floorsDescended)") print("Current Pace: \(activityData.currentPace)") print("Current Cadence: \(activityData.currentCadence)") }
Вот и все. Основы работы с классом CMPedometer. Это может быть отличным способом получить базовые данные о движении, с которыми вы можете работать и предоставлять своим пользователям.