Этого можно добиться, используя действия UIButton
Touch Down
и Touch Up Inside
class ViewController: UIViewController {
var timer : Timer?
var startTime = 0
var timerReset = true // I don't know what logic you want. This basically has been added so the number is not set to 0 immediately when you release the button. You can also add another button to reset startTime variable and the label
@IBOutlet weak var numberLabel: UILabel!
@IBOutlet weak var numberButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
numberLabel.text = String(startTime) //initial value
// Do any additional setup after loading the view.
}
@IBAction func holdingTheButton(_ sender: Any) {
print("I am holding")
timerReset = false // reset to false since you are holding the button
guard timer == nil else { return }
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateTime), userInfo: nil, repeats: true)
}
@IBAction func buttonReleased(_ sender: Any) {
print("button released")
startTime = 0
timer?.invalidate()
timer = nil
timerReset = true // reset to true since you released.
}
@objc func updateTime(){
//update label every second
print("updating label ")
if timerReset {
startTime = 0
}
startTime += 1
numberLabel.text = String(startTime)
}
}
ВАЖНО: Убедитесь, что вы подключаетесь правильно. Touch Down
необходимо использовать, если вы хотите вызвать функцию, удерживая кнопку:
В вашей консоли вы должны увидеть, что это происходит если вы отпустите кнопку после 10 секунд:
Если вы хотите иметь кнопку для сброса, вы можете просто добавить ее, а затем подключить ее к следующей функции (но также убедитесь, что вы удалили bool timeReset
и оператор if внутри updateTime
:
@IBAction func resetTimer(_ sender: Any) {
startTime = 0
numberLabel.text = String(startTime)
}