相关疑难解决方法(0)

擦洗时跳跃的 UISlider - 将 UISlider 与 AVPlayer 一起使用

我正在使用 AvPlayer 并尝试设置一个滑块以允许清理音频文件。我有一个问题,当它被选中时,滑块会跳到整个地方。然后它会回到原点位置一秒钟,然后再回到它被拖动到的位置。

你在 Gif 上看不到我的光标,但是平滑拉长的拖拽是我移动旋钮,然后快速鞭子是滑块行为不端。

在此处输入图片说明

我花了几个小时在谷歌上搜索和梳理 Stack Overflow,但无法弄清楚我在这里做错了什么,很多类似的问题都很老而且在 ObjC 中。

这是我认为导致问题的代码部分,它确实处理了滑块被移动的事件:我也尝试过没有 if 语句,但没有看到不同的结果。

@IBAction func horizontalSliderActioned(_ sender: Any) {

    horizontalSlider.isContinuous = true

    if self.horizontalSlider.isTouchInside {

        audioPlayer?.pause()
            let seconds : Int64 = Int64(horizontalSlider.value)
                let preferredTimeScale : Int32 = 1
                    let seekTime : CMTime = CMTimeMake(seconds, preferredTimeScale)
                        audioPlayerItem?.seek(to: seekTime)
                            audioPlayer?.play()

    } else {

        let duration : CMTime = (self.audioPlayer?.currentItem!.asset.duration)!
            let seconds : Float64 = CMTimeGetSeconds(duration)
                self.horizontalSlider.value = Float(seconds)
    }
}
Run Code Online (Sandbox Code Playgroud)

我将在下面包括我的整个班级以供参考。

import UIKit
import Parse
import AVFoundation
import AVKit


class PlayerViewController: …
Run Code Online (Sandbox Code Playgroud)

uislider ios avplayer swift

5
推荐指数
2
解决办法
2530
查看次数

更新 AVPlayer 时 UISlider 跳转

我尝试使用 UISlider 实现简单的播放器来指示当前音频文件的时间。

在此输入图像描述

在代码中我添加了两个观察者:

    slider.rx.value.subscribe(onNext: { value in
        let totalTime = Float(CMTimeGetSeconds(self.player.currentItem!.duration))
        let seconds = value * totalTime
        let time = CMTime(seconds: Double(seconds), preferredTimescale: CMTimeScale(NSEC_PER_SEC))
        self.player.seek(to: time)
        }).disposed(by: bag)
    let interval = CMTime(seconds: 0.1, preferredTimescale: CMTimeScale(NSEC_PER_SEC))
    player.addPeriodicTimeObserver(forInterval: interval, queue: nil) { [weak self] time in
        self?.updateSlider(with: time)
    }
Run Code Online (Sandbox Code Playgroud)

具有一个私有函数:

private func updateSlider(with time: CMTime) {
    let currentTime = CMTimeGetSeconds(time)
    var totalTime = CMTimeGetSeconds(player.currentItem!.duration)
    if totalTime.isNaN {
        totalTime = 0
    }
    startLabel.text = Int(currentTime).descriptiveDuration
    endLabel.text = Int(totalTime).descriptiveDuration
    slider.value = Float(currentTime / …
Run Code Online (Sandbox Code Playgroud)

uislider ios avplayer swift

5
推荐指数
1
解决办法
1644
查看次数

使用 AVAudioPlayer 进行 UISlider 更新

我正在制作一个简单的音频播放器应用程序,它允许用户使用 UISlider 更改他们在曲目中的位置。

它不做的事情:滑块不会根据曲目的进度进行更新。我在这里发现了一个类似的问题,第二个答案是响应AVAudioPlayer- 建议使用currentTime更新滑块。我想尝试这样做。

这是我的代码:

import UIKit
import AVFoundation

class MusicViewController: UIViewController {

    ....

    @IBOutlet var Slider: UISlider!

    @IBAction func changeAudioTime(_ sender: Any) {
        Slider.maximumValue = Float(audioPlayer.duration)
        audioPlayer.stop()
        audioPlayer.currentTime = TimeInterval(Slider.value)
        audioPlayer.prepareToPlay()
        audioPlayer.play()
    }

    func updateSlider(){

        Slider.value = Float(audioPlayer.currentTime)
        print("Changing works")
    }
Run Code Online (Sandbox Code Playgroud)

第一个函数工作正常——用户可以改变他们所在的位置。但是,我的第二个功能应该Slider.value根据currentTimeAudioPlayer 的 进行更改。它不这样做。

它也没有打印,所以我相信它没有触发。

我是 Swift 的新手,所以我可能会遗漏一些东西。有任何想法吗?

avaudioplayer ios swift swift3

3
推荐指数
1
解决办法
3414
查看次数

标签 统计

ios ×3

swift ×3

avplayer ×2

uislider ×2

avaudioplayer ×1

swift3 ×1