Обновления Core-motion

#ios #swift #xcode #core-motion

#iOS #swift #xcode #core-motion

Вопрос:

У меня есть программа, которая запускает таймер и сообщает пользователю, что он / она должен начать ходить, скажем, 5 минут. Через 5 минут я сообщаю пользователю, что он / она должен начать запуск. Как мне сообщить пользователю начать запуск, если пользователь все еще идет? ActivityManager просто обновляется, когда происходят изменения в движении? Поэтому мне не на что запускать. Я пытался остановить ActivityManager и запустить его снова, когда таймер истек, но безуспешно.

 private func startTrackingActivityType() {
    activityManager.startActivityUpdates(to: OperationQueue.main) {
        [weak self] (activity: CMMotionActivity?) in
        guard let activity = activity else { return }
        DispatchQueue.main.async { [self] in
            
            
            if activity.walking {
                self?.activityTypeLabel.text = "Walking"      
            }
            
            if activity.stationary {
                self?.activityTypeLabel.text = "Stationary"                                  
            }
            
            if activity.running {
                self?.activityTypeLabel.text = "Running"                      
            }
            
        }
    }
}
 

Комментарии:

1. Вы сохраняете текущий тип действия в свойстве. Затем вы можете использовать таймер и проверить это свойство; если это не .running так, предупредите их или что-то еще

Ответ №1:

вам нужно связать время ходьбы пользователя и текущий CM. Прежде всего, я бы начал измерять время, как только CM изменится с «стационарного» на «ходьбу». Итак, вам нужен своего рода таймер. После этого вы можете просто выполнить предложение if.

 if time => 300 {
print("Start running, nerd!")
}
 

Но, как я уже сказал, самая важная часть заключается в том, что вы каким-то образом получаете таймер, связанный с CoreMotion.

Надеюсь, я немного помог.