我正在尝试使用AVAudioPlayer
在NSTimer
点击特定秒数时如何调用操作。
代码:
var audioFile = try! AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("FileName", ofType: "mp3")!))
override func viewDidLoad() {
super.viewDidLoad()
NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("checkPlaybackTime:"), userInfo: nil, repeats: true)
}
func checkPlaybackTime(timer:NSTimer){
let seconds : NSTimeInterval = audioFile.currentTime
if (seconds == 20.0){
btnPausePlay.setTitle("Play", forState: UIControlState.Normal)
}
}
我想要调用的动作是btnPausePlay按钮文本设置为“Play”,它从未像我在if语句中调用它那样。
编辑:它现在有效。我从if (seconds == 20.0
更改为if (seconds >= 20.0)
答案 0 :(得分:0)
虽然这个答案没有明确使用NSTimer
,但它确实利用addPeriodicTimeObserverForInterval
类的方法AVPlayer
来达到同样的目的:
初始化播放器后,请执行以下操作:
let observerInterval = CMTimeMakeWithSeconds(0.5, 100) //this sets the interval at every half second
timeObserverToken = audioPlayer.addPeriodicTimeObserverForInterval(observerInterval, queue: nil, usingBlock: self.getPlaybackTimer)
函数getPlaybackTimer
如下所示:
func getPlaybackTimer(time: CMTime){
let currentTime = audioPlayer.currentTime()
/* *** */
}
答案 1 :(得分:0)
正如nhgrif指出的那样,你的逻辑是有缺陷的。您正在以不应该的方式比较浮点值。在比较浮点数时,几乎总是需要考虑一些变化。
然而,在这种情况下,这并不足够,因为您的比较可能会在检查间隔之外发生。你最好在这里使用不等式,即> = 20.0。您可能想要禁用计时器。