일주일의 걸음 수를 얻다
11978 단어 Swift
먼저, CoreMotion.프레임워크를 추가합니다.
CMPedometer.isStepCountingAvailable()
보수 취득 여부를 판정한다.if(!CMPedometer.isStepCountingAvailable()) {
// 取得できないとき
}
가져오기 시작 및 종료 NSDate를 지정합니다.let pedometer:CMPedometer = CMPedometer()
pedometer.queryPedometerDataFromDate(from, toDate: to, withHandler: {(pedometerData:CMPedometerData!, error:NSError!) in
})
pedometerData에 걸음 수에 대한 정보를 저장하면 다음과 같은 정보를 접근할 수 있습니다.pedometerData.numberOfSteps // 歩数
pedometerData.distance // 距離
pedometerData.floorsAscended // 上った回数
pedometerData.floorsDescended // 下った回数
하루 각각 1주일씩 보수를 확보하기 위해 오늘 기준으로 1일 전, 2일 전, 3일 전에 취득한다./**
歩数計に関する一週間分の情報を返します。
:returns: 歩数計に関する情報
*/
func pedometerQuery() -> NSMutableArray {
var result = NSMutableArray()
let pedometer:CMPedometer = CMPedometer()
if(!CMPedometer.isStepCountingAvailable()) {
return result
}
let now:NSDate = NSDate()
let formatter:NSDateFormatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
var from:NSDate = self.stringToDate(formatter.stringFromDate(now), isStart: true)
var to:NSDate = self.stringToDate(formatter.stringFromDate(now), isStart: false)
for i in 0...6 {
let semaphore:dispatch_semaphore_t = dispatch_semaphore_create(0)
pedometer.queryPedometerDataFromDate(from, toDate: to, withHandler: {(pedometerData:CMPedometerData!, error:NSError!) in
result[i] = [
"steps": pedometerData.numberOfSteps,
"distance": pedometerData.distance,
"floorsAscended": pedometerData.floorsAscended,
"floorsDescended": pedometerData.floorsDescended,
"startDate": pedometerData.startDate,
"endDate": pedometerData.endDate
]
dispatch_semaphore_signal(semaphore)
})
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
from = self.dateByAddingDay(from, day: -1)
to = self.dateByAddingDay(to, day: -1)
}
return result
}
/**
指定した日付に時分秒を追加して新しいNSDateを返します。
:param: date もとのNSDate
:param: isStart trueのとき00:00:00、falseのとき23:59:59を追加します
:returns: 新しいNSDate
*/
private func stringToDate(date: String, isStart: Bool) -> NSDate {
let timestamp = (isStart) ? date + " 00:00:00" : date + " 23:59:59"
let formatter:NSDateFormatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
return formatter.dateFromString(timestamp)!
}
/**
指定した日数を加減した新しいNSDateを返します。
:param: date もとのNSDate
:param: day 加減する日数
:returns: 新しいNSDate
*/
private func dateByAddingDay(date: NSDate, day: Int) -> NSDate {
let calendar:NSCalendar = NSCalendar.currentCalendar()
let components:NSDateComponents = NSDateComponents()
components.day = day
return calendar.dateByAddingComponents(components, toDate: date, options: NSCalendarOptions.allZeros)!
}
Reference
이 문제에 관하여(일주일의 걸음 수를 얻다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/arthur87/items/1e4e326c81a40d515ebd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)