如果 LongPressReconizerState 结束,预定的计时器不会结束
scheduled timer does not end, if LongPressReconizerState is end
我尝试通过 AVAudioPlayer 构建一个音乐播放器。我的音频播放器工作了!现在我尝试构建倒带功能,这是一个双功能按钮:
- 一次点击:播放器从头开始(
player.currentTime = 0
)(有效)
- Longpess:播放器以 0.5 秒的步长开始倒带,并在释放按钮时结束 "rewind process"
我的代码(摘要)
var player = AVAudioPlayer()
@IBOutlet weak var rewindButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(rewindTapAction)) //Tap function will call when user tap on button
let longGesture = UILongPressGestureRecognizer(target: self, action: #selector(rewindLongPressAction(_:))) //Long function will call when user long press on button.
tapGesture.numberOfTapsRequired = 1
rewindButton.addGestureRecognizer(tapGesture)
rewindButton.addGestureRecognizer(longGesture)
}
@objc func rewindTapAction(){
print("tapped")
player.currentTime = TimeInterval(0)
}
@objc func rewindLongPressAction(_ gestureRecognizer: UILongPressGestureRecognizer){
print("longpress")
var rewindTimer : Timer!
if gestureRecognizer.state == .began{
print("longpress started")
rewindTimer = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true, block: { Timer in
self.player.currentTime = TimeInterval( self.player.currentTime - 0.5)
print("timer")
})
}else if gestureRecognizer.state == .ended || gestureRecognizer.state == .cancelled{
print("longpress ended")
rewindTimer.invalidate()
}
}
我的问题是:
在我松开rewindButton(长按)后,倒带计时器没有停止。为什么?
您应该在 rewindLongPressAction 函数的范围之外定义 rewindTimer。当您的函数以手势状态 .ended 再次被调用时,它不再具有对 rewindTimer 的相同引用。
我尝试通过 AVAudioPlayer 构建一个音乐播放器。我的音频播放器工作了!现在我尝试构建倒带功能,这是一个双功能按钮:
- 一次点击:播放器从头开始(
player.currentTime = 0
)(有效) - Longpess:播放器以 0.5 秒的步长开始倒带,并在释放按钮时结束 "rewind process"
我的代码(摘要)
var player = AVAudioPlayer()
@IBOutlet weak var rewindButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(rewindTapAction)) //Tap function will call when user tap on button
let longGesture = UILongPressGestureRecognizer(target: self, action: #selector(rewindLongPressAction(_:))) //Long function will call when user long press on button.
tapGesture.numberOfTapsRequired = 1
rewindButton.addGestureRecognizer(tapGesture)
rewindButton.addGestureRecognizer(longGesture)
}
@objc func rewindTapAction(){
print("tapped")
player.currentTime = TimeInterval(0)
}
@objc func rewindLongPressAction(_ gestureRecognizer: UILongPressGestureRecognizer){
print("longpress")
var rewindTimer : Timer!
if gestureRecognizer.state == .began{
print("longpress started")
rewindTimer = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true, block: { Timer in
self.player.currentTime = TimeInterval( self.player.currentTime - 0.5)
print("timer")
})
}else if gestureRecognizer.state == .ended || gestureRecognizer.state == .cancelled{
print("longpress ended")
rewindTimer.invalidate()
}
}
我的问题是:
在我松开rewindButton(长按)后,倒带计时器没有停止。为什么?
您应该在 rewindLongPressAction 函数的范围之外定义 rewindTimer。当您的函数以手势状态 .ended 再次被调用时,它不再具有对 rewindTimer 的相同引用。