Как считать время пока телефон трясется по быстрому? - PullRequest
2 голосов
/ 24 мая 2019

Как считать время, пока телефон трясется по-быстрому?хочу измерить время, как долго трясется телефон.

var timer = Timer()
var timeLeft = 0

override func motionBegan(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
    if(motion == .motionShake){
        timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(onTimerFires), userInfo: nil, repeats: true)
    }
}
override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
    if(motion != .motionShake){
        print("MotionEnded")
        timer.invalidate()
    }
}

Таймер работает бесконечно.Как остановить таймер при встряхивании стоп ...

Ответы [ 3 ]

1 голос
/ 24 мая 2019

Чтобы измерить timeInterval между встряхиванием start time и end time, используя

var startDate: Date?

override func motionBegan(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
    if(motion == .motionShake){
        self.startDate = Date()
    }
}

override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
    if(motion != .motionShake){
        if let startDate = self.startDate {
            let timeInterval = Date().timeIntervalSince(startDate)
            print(timeInterval)
        }
    }
}

В приведенном выше коде я сохранил экземпляр Date, в котором motion begins икогда motion ends timeInterval рассчитывается с использованием current date и stored date.

0 голосов
/ 24 мая 2019

Попробуйте код ниже: здесь startDate - это отметка времени, когда начинается встряхивание.

override func motionBegan(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
        startDate = Date()
        print("Motion begins")
    }

    override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
        print("Motion ends")
        let endDate = Date()
        let difference = Calendar.current.dateComponents([.hour, .minute, .second, .nanosecond], from: startDate!, to: endDate)
        let formattedString = String(format: "%02ld %02ld %02ld %02ld", difference.hour!, difference.minute!, difference.second!, difference.nanosecond!)
        print(formattedString)
    }

На выходе будет напечатана разница во времени в часах, минутах, секундах и нано секундах.

Надеюсь, это поможет.

0 голосов
/ 24 мая 2019

Проверено на реальном устройстве:

  var startShaking = CFAbsoluteTimeGetCurrent()

  override func motionBegan(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
    if motion == .motionShake {
      startShaking = CFAbsoluteTimeGetCurrent()
    }
  }

  override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
    if motion == .motionShake {
      let shakingTime = CFAbsoluteTimeGetCurrent() - startShaking
      print("shaking for \(shakingTime) seconds")
    }
  }
...