我正在使用Player库,即使用AVPlayer& AVFoundation,这对我来说很安静。我成功地设法播放了视频并添加了一个滑块。我将滑块的最小值设置为0,最大值设置为视频的持续时间..
此时,为了将滑块连接到当前播放时间,我在StackOverflow上使用了this answer。我设置了一个协议并使用了addPeriodicTimeObserverForInterval
,因此滑块链接到currentTime并随着视频的成功移动而移动。
现在,这是我的问题。我想反过来做 - 当滑块移动时,设置视频的当前时间(向前,向后)。
我进行了一些研究,我发现seekToTime
我应该将slider.value
(sender.value
与我的情况相关联),但是,我无法做到了解如何将其应用于播放器。如何使滑块控制当前时间?
我不确定我是否正确,但据我了解,第一步应该是:
protocol UserSetsTheTimeDelegate
{
func userSetsTheTime(result: Int)
}
class ViewController: UIViewController, PlayerDelegate {
...
func sliderValueDidChange(sender:UISlider!) {
print("value--\(sender.value)")
self.delegate?.userSetsTheTime(sender.value)
}
}
另外,我想我应该在Player.swift中添加UserSetsTheTimeDelegate
,但我在这里感到困惑。
更新:
我意识到我可以通过使用ViewController中的实例并在Player类中添加方法将数据发送到Player.swift。这是第一步。但是现在,由于currentTime正在快速更新(修改滑块),它不会让我操纵滑块值。
答案 0 :(得分:3)
从UX的角度来看,最好在滑块上的seek()
之后调用Player
上的touchUp
方法,而不是在值发生变化时调用sliderValueDidChange
方法。
正如您所注意到的,您对=AGGREGATE(1, 6, AA11:AA16)
的体验不佳。
相反,尝试在滑块上的UIControlEvents.TouchUpInside(例如)上添加目标/操作,然后只搜索。经验应该更好。
var slider : UISlider! { didSet { slider.addTarget(self, action: Selector("touchUp:"), forControlEvents: [UIControlEvents.TouchUpInside]) } } func touchUp(sender:AnyObject?) { // player.seek(slider.currentValue) }
答案 1 :(得分:0)
我解决了我的问题。我创建了一个Player实例,因此我能够将视图控制器中的数据发送回Player类。然后我只是应用了seekToTime()
。此时,从视觉上看,它看起来很差,但后来我注意到我可以使用stop()
,setCurrentTime()
然后play()
来使它看起来更漂亮。