如何使滑块值更改对象或功能?

时间:2016-06-22 15:44:19

标签: ios xcode swift audio avfoundation

我是网站和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)
}

但是,我仍然遇到错误问题。另外,我如何能够根据值指定播放的音频?

2 个答案:

答案 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))
    }