0

我在使用擦洗方法UISlider时遇到了麻烦。AVPlayer每次调用该方法时,播放器都会从 0 重新启动。我尝试调试,似乎滑块值是正确的,但是当我 Step Over 时,它设置为 0,因此播放器重新启动。这是我尝试过的:

    var desiredTime = CMTimeMake(Int64(self.progressSlider.value), 1)

    AudioManager.sharedInstance.audioPlayer.seekToTime(desiredTime)

我也尝试过查看类似的问题,发现当我尝试他们的解决方案时它是一样的。

我感谢您的帮助。

4

2 回答 2

0

正如我在评论中指出的那样,您需要将滑块的最小值设置为 0,并将其最大值设置为正在播放的资产的持续时间。

要使滑块在播放器播放时移动,请为播放器添加一个周期性观察者。例如:

CMTime interval = CMTimeMakeWithSeconds(.25,1000); [_player addPeriodicTimeObserverForInterval:interval queue:NULL usingBlock:
    (CMTime time)){ NSTimeInterval t = CMTimeGetSeconds(time);
         mySlider.value = t; }];

(您可能需要对 self 进行弱引用才能访问mySlider。)块的时间参数是玩家的当前时间。

当用户滑动时,使用 seekToTime 设置玩家位置。

一个警告:虽然这有效,但滑块的增量将显示为拇指的小跳跃。我还没有想出一个简单的方法来让滑块连续移动——可能值得自己提出一个问题。

于 2015-07-30T15:40:11.030 回答
0

方法的使用是不对的。您可以在图书馆中查找。

var desiredTime = CMTimeMake(self.progressSlider.value *1000, 1000);
AudioManager.sharedInstance.audioPlayer.seekToTime(desiredTime)
于 2015-07-30T02:34:12.327 回答