일주일의 걸음 수를 얻다

11978 단어 Swift
액션 프로세서가 탑재된 아이폰5s 이후 단말기는 일주일간 스텝을 확보할 수 있다.

먼저, 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)!
}

좋은 웹페이지 즐겨찾기