当我的滑块拇指在中间时,为什么没有播放音乐音量?

How come music volume is not playing when my slider thumb is in the middle?

我有这个控制音乐播放音量的 UISlider。当拇指在中间时,音乐的音量设置为 1 并且应该播放。我遇到的问题是它正在播放,但是一旦我将拇指向右或向左移动并尝试将拇指移回中间,我就听不到任何音乐。当我向左或向右移动并为任一 AVPlayer 播放音乐时,它会起作用,除非滑块位于中间。提前致谢!

    middleSlider = UISlider(frame: CGRectMake(110 * scaleFactor, 50, 300, 150))
    middleSlider.tintColor = UIColor.whiteColor()
    middleSlider.setThumbImage(UIImage(named: "thumb3"), forState: UIControlState.Normal)
    middleSlider.minimumTrackTintColor = UIColor.whiteColor()
    middleSlider.maximumTrackTintColor = UIColor.whiteColor()
    middleSlider.maximumValue = 2.0
    middleSlider.minimumValue =  0.0
    middleSlider.value = 1.0
    middleSlider.continuous = true
    middleSlider.userInteractionEnabled = false
    middleSlider.addTarget(self, action: #selector(middleSliderChangeAudio), forControlEvents: UIControlEvents.AllEvents)
    self.view?.addSubview(middleSlider)


    func middleSliderChangeAudio() {
    if middleSlider.value < 1.0 {

        player.volume = 1
        player2.volume = 0

    }

    if middleSlider.value > 1.0 {
        player.volume = 0
        player2.volume = 1
    }

    if middleSlider.value == 1.0 {
        player.volume = 1
        player2.volume = 1
}

  }

您的应用实施了一个非常不友好的 UI。您正在检查滑块的旋钮是否 精确 在中心。

即使在最好的情况下,这对任何人来说都是极其困难的。用户必须点击一个像素。

此外,根据滑块的框架,用户可能会或可能不会将旋钮放在那里,因为旋钮位置将调整到最近的像素。可能无法准确达到 1.0 -- 最近的可能位置可能略高于和低于 1.0。

与其准确检查 1.0,不如查找 1.0 的某个阈值内的值。

let threshold: Float = 0.05  // Experiment with this to see what feels best.
let lowerBoundary: Float = 1.0 - threshold
let upperBoundary: Float = 1.0 + threshold

if middleSlider.value < lowerBoundary {
    player.volume = 1
    player2.volume = 0
}
else if middleSlider.value <= upperBoundary {
    player.volume = 1
    player2.volume = 1
}
else /* must be middleSlider.value > upperBoundary */ {
    player.volume = 0
    player2.volume = 1
}

如果你想看到滑块"snap"到中心,在中间条件中调用middleSlider.value = 1.0