Как создать таймер с точностью до 0,1 секунды? - PullRequest
1 голос
/ 25 апреля 2019

Я попытался добавить таймер в приложение для рисования, чтобы оно могло отслеживать время рисования. Когда пользователь начинает рисовать (касания начинаются), таймер начинает отсчет времени. Затем, когда пользователь поднимает ручку или палец, таймер останавливается. Я хотел, чтобы точность таймера составляла 0,1 секунды.

Ниже приведен код, который я пробовал, но он может иметь только 1 как самый маленький внутренний код.

@objc func startTiming () {
         time += 1.0
     }
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    //start timing
    timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(TrailingCanvas.startTiming), userInfo: nil, repeats: true)
    let touch = touches.first
    startingPoint = touch?.preciseLocation(in: self)
    TrailUserInputX.append(startingPoint.x)
    TrailUserInputY.append(startingPoint.y)
    print("\(String(describing: touch?.force))")
    }

}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    //timer
    timer.invalidate()
    endingPointX = TrailUserInputX.last
    if endingPointX != nil {
        UserMatchingLocation.append(endingPointX!)
    }
}

1 Ответ

1 голос
/ 25 апреля 2019

Таймеры не подходят для этой работы.Вы можете получить гораздо более точное время, записав время (как Date объект) на touchesBegan, и увидев, сколько времени прошло с тех пор, как touchesEnded.

var lastTouchesBeganDate: Date?

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    lastTouchesBeganDate = Date()

    let touch = touches.first
    startingPoint = touch?.preciseLocation(in: self)
    TrailUserInputX.append(startingPoint.x)
    TrailUserInputY.append(startingPoint.y)
    print("\(String(describing: touch?.force))")
    }

}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    time += lastTouchesBeganDate?.timeIntervalSinceNow ?? 0

    endingPointX = TrailUserInputX.last
    if endingPointX != nil {
        UserMatchingLocation.append(endingPointX!)
    } }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...