我是网站和Swift的新手,所以感谢您对问题技术的任何反馈。
我试图让滑块的值改变正在播放的音频和文本标签(或图像)。
我创建了我的网点:
@IBOutlet weak var audioSlider: UISlider!
@IBOutlet weak var audioValue: UILabel!
我的行动:
@IBAction func audioSliderValueChanged(sender: UISlider) {
var currentValue = (sender.value)
audioValue.text = (StringInterpolationConvertible: audioValue))
全部连接到一个滑块。我不确定如何处理这个问题 - 如果有其他工作吗?
编辑:韩勇代码:
已经有一个'做'使用AVFoundation进行应用程序内的其他声音。我导入了Foundation(AVFoundation已导入)
我已添加:
@IBOutlet weak var audioSlider: UISlider!
@IBOutlet weak var audioValue: UILabel!
var audioSliderPlayer:AVAudioPlayer = AVAudioPlayer()
var currentTime: Double {
get {
return CMTimeGetSeconds(audioSliderPlayer.currentTime)
}
set {
let newTime = CMTimeMakeWithSeconds(newValue, 1)
audioSliderPlayer.seekToTime(newTime, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero)
}
}
在do函数之后添加以下内容(在viewDidLoad中):
{timeObserverToken = audioSliderPlayer.addPeriodicTimeObserverForInterval(interval, queue: dispatch_get_main_queue()) {
[weak self] time in
self?.timeSlider.value = Float(CMTimeGetSeconds(time))
}}
}
我已更新动作:
@IBAction func timeSliderDidChange(sender: UISlider) {
currentTime = Double(sender.value)
}
但是,我仍然遇到错误问题。另外,我如何能够根据值指定播放的音频?
答案 0 :(得分:0)
我想你希望audioValue.text
显示相同的滑块值,对吧?
试试这个:
@IBAction func audioSliderValueChanged(sender: UISlider) {
var currentValue = (sender.value)
audioValue.text = "\(currentValue)"
}
答案 1 :(得分:0)
如果你使用AVFoundation和AVPlayer,苹果提供的sample source会有所帮助。
在此源代码中,指定具有get和set方法的var。在set方法中,更新标签和播放器状态。 (示例源代码段不会更新标签,但您可以进行更新。)
var currentTime: Double {
get {
return CMTimeGetSeconds(player.currentTime())
}
set {
let newTime = CMTimeMakeWithSeconds(newValue, 1)
player.seekToTime(newTime, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero)
}
}
如果滑块改变,则触发变量的set方法。标签和播放器状态将会更新。
@IBAction func timeSliderDidChange(sender: UISlider) {
currentTime = Double(sender.value)
}
将addPeriodicTimeObserverForInterval方法添加到AVPlayer。它将在您设置的每个间隔调用并触发变量的setter。
timeObserverToken = player.addPeriodicTimeObserverForInterval(interval, queue: dispatch_get_main_queue()) {
[weak self] time in
self?.timeSlider.value = Float(CMTimeGetSeconds(time))
}