Я не уверен, что именно вам это нужно, но ниже ответа Дункана я прочитал, что вам нужно скопировать что-то из логики YouTube.
Да, конечно, вы можете использовать распознаватель жестов касания, но если вам нужно по какой-то причине UIButton
, вы можете создать его подкласс.
После первого касания ничего не происходит, но затем после каждого следующего касания вызывается обработчик valueChanged
, который вы установите в контроллере представления. Если вы не нажмете кнопку снова до определенной продолжительности ожидания, touches
будет сброшено до 0.
class TouchableButton: UIButton {
var waitDuration: Double = 1.5 // change this for custom duration to reset
var valueChanged: (() -> Void)? // set this to handle press of button
var minimumTouches: Int = 2 // set this to change number of minimum presses
override init(frame: CGRect) {
super.init(frame: frame)
setTarget()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setTarget()
}
private func setTarget() {
addTarget(self, action: #selector(buttonTouched), for: .touchUpInside)
}
@objc private func buttonTouched() {
touches += 1
}
private var timer: Timer?
private var touches: Int = 0 {
didSet {
if touches >= minimumTouches {
valueChanged?()
timer?.invalidate()
timer = Timer.scheduledTimer(withTimeInterval: waitDuration, repeats: false) { _ in
self.touches = 0
}
}
}
}
}
тогда, когда вам нужно установить, что должно происходить после каждого прикосновения, вы можете установить обработчик измененных значений
button.valueChanged = { // button of type `TouchableButton`
//print("touched")
... // move 10s forward or backwards
}
Вы также можете изменить waitDuration
свойство, которое определяет время ожидания между последним нажатием и временем, когда touches
будет сброшен
button.waitDuration = 1
также вы можете установить минимальное количество касаний (в первый раз при выполнении valueChanged
)
button.minimumTouches = 3