我正在使用播放器库,即使用AVPlayer和AVFoundation,这对我来说很方便。我成功地播放了视频并添加了一个滑块。我将滑块的最小值设置为0,将最大值设置为视频的持续时间。
此时,为了将滑块连接到当前播放时间,我在StackOverflow上使用了这个答案。我设置了协议并使用addPeriodicTimeObserverForInterval
,所以滑块链接到currentTime并随着视频成功移动而移动。
现在,这是我的问题。我想做相反的事情-当滑块移动时,设置视频的currentTime(向前,向后)。
我进行了一些研究,发现seekToTime
应该链接slider.value
(sender.value
以我为例),但我不知道如何将其应用于Player。如何使滑块控制currentTime?
我不确定自己是否正确,但据我了解,第一步应该是:
protocol UserSetsTheTimeDelegate
{
func userSetsTheTime(result: Int)
}
class ViewController: UIViewController, PlayerDelegate {
...
func sliderValueDidChange(sender:UISlider!) {
print("value--\(sender.value)")
self.delegate?.userSetsTheTime(sender.value)
}
}
并且添加,我想我应该UserSetsTheTimeDelegate
在Player.swift中添加,但是我在这里感到困惑。
更新:
我意识到可以通过在ViewController中使用实例并在Player类中添加方法来将数据发送到Player.swift。这是第一步。但是现在,由于currentTime更新得非常快(通过修改滑块),所以它不允许我操纵滑块值。
从UX的角度来看,最好在滑块seek()
上的Player
a之后调用方法touchUp
,而不是每当值更改时就调用该方法。
如您所知,您对的经验不足sliderValueDidChange
。
而是尝试在滑块上的UIControlEvents.TouchUpInside(例如)上添加目标/操作,然后仅进行查找。经验应该更好。
是滑块:UISlider!{ didSet { slide.addTarget(self,action:Selector(“ touchUp:”),forControlEvents:[UIControlEvents.TouchUpInside]) } } func touchUp(sender:AnyObject?){ // player.seek(slider.currentValue) }
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句