Я делаю приложение Apple Watch для фитнеса, используя HealthKit framework
. Это должно быть запущено в течение 6 минут.
Итак, я добавил NSTimer
тоже. После того, как пользователь начал ходить, мне нужно сохранить эти данные, и для каждой секунды необходимо отображать BPM и расстояние в UILabel's
.
. И я должен отправить всего 6 минут json данных на сервер.
Я пробовал ниже код
var count = 0
var countdownTimer: Timer!
static let healthKitStore = HKHealthStore()
static func authorizeHealthKit() {
let healthKitTypes: Set = [
HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.heartRate)!,
HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.distanceWalkingRunning)!
]
healthKitStore.requestAuthorization(toShare: healthKitTypes,
read: healthKitTypes) { _, _ in }
}
static func saveMockHeartData() {
// 1. Create a heart rate BPM Sample
let heartRateType = HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.heartRate)!
let heartRateQuantity = HKQuantity(unit: HKUnit(from: "count/min"),
doubleValue: Double(arc4random_uniform(80) + 100))
let heartSample = HKQuantitySample(type: heartRateType,
quantity: heartRateQuantity, start: NSDate() as Date, end: NSDate() as Date)
print("heartSample data is \(heartSample)")
// 2. Save the sample in the store
healthKitStore.save(heartSample, withCompletion: { (success, error) -> Void in
if let error = error {
print("Error saving heart sample: \(error.localizedDescription)")
}
})
}
override func awake(withContext context: Any?) {
super.awake(withContext: context)
// Configure interface objects here.
self.timerLabel.setTextColor(UIColor(red: 98.0/255, green: 224.0/255, blue: 258.0/255, alpha: 1.0))
authorizeHealthKit()
}
override func willActivate() {
// This method is called when watch view controller is about to be visible to user
super.willActivate()
countdownTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTime), userInfo: nil, repeats: true)
}
@objc func updateTime() {
count = count + 1
if(count < 360) {
timerLabel.setText(String(timeString(time: TimeInterval(count))))
} else {
print("Workout completed")
countdownTimer.invalidate()
}
print("\(count)")
}
Есть предложения?