Ноль нельзя присвоить типу "Таймер"?
Привет! Я заканчиваю исследование болезни Альцгеймера - я хочу иметь возможность записать время, необходимое для завершения рисунка (для рисования пациенту требуется всего несколько секунд). Я хочу записать как время, проведенное яблочным карандашом на планшете, так и общее время, потраченное на завершение рисунка (время на планшете плюс время между штрихами).
Я создал это приложение до сих пор, но не могу заставить работать таймер.
У меня есть доска для рисования / каракули.
Я пробовал много разных подходов, но у меня недостаточно опыта в коде, чтобы понять, почему он не запускает таймер, когда яблочный карандаш попадает в планшет. Код ниже предназначен для скрипта ViewController.
Только один из таймеров = время, потраченное на рисование, был создан до сих пор. Но я даже не могу заставить это работать.
Попробовал сменить скрипт, попробовал расспросить друзей. Я довольно новый, чтобы быстро, так что любая помощь очень ценится.
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var canvasView: CanvasView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
@IBAction func clearCanvas(_ sender: Any) {
canvasView.clearCanvas()
timer.invalidate()
seconds = 0
timeDrawing.text = "\(seconds)"
}
@IBOutlet weak var timeDrawing: UILabel!
var seconds = 0
var timer = Timer()
var isTimerRunning = false //This will be used to make sure only one timer is created at a time.
var resumeTapped = false
var touchPoint:CGPoint!
var touches:UITouch!
func runTimer() {
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(ViewController.updateTimer)), userInfo: nil, repeats: true)
}
private(set) var from: Date?
@objc func updateTimer() {
let to = Date()
let timeIntervalFrom = (from ?? to).timeIntervalSince1970
let time = to.timeIntervalSince1970 - timeIntervalFrom
timeDrawing.text = "\(round(time))" //This will update the label.
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesBegan(touches, with: event)
guard let touch = touches.first else { return }
let touches = touch.location(in: canvasView) // or maybe ...(in: self)
if touch.type == .pencil {
if !isTimerRunning {
from = Date()
runTimer()
}
}
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesEnded(touches, with: event)
if !isTimerRunning {
timer.invalidate()
timer = nil
from = nil
timeDrawing.text = "0"
}
}
}
Я надеялся, что когда яблочный карандаш коснется планшета, запустится таймер. И затем, когда карандаш покинул планшет, он остановил один таймер и запустил один из таймеров (еще не реализован). (Мне еще нужно добавить еще один таймер на время между ударами, любая помощь в этом тоже будет признательна.)
1 ответ
Только опциональные значения могут принимать значения nil, вы можете сделать объект таймера необязательным, как этот
var timer:Timer?
Да, это имеет смысл. отредактированный