2016-04-24 34 views
0

我有這個控制音樂播放音量的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 
} 

    } 
+0

你確定你在中間設置滑塊_exactly_嗎?使用斷點或日誌消息檢查'middleSlider.value'的值。它恰恰是1.0嗎? –

+0

它在開始工作時,它的設置爲1.但是,當我將滑塊向右或向左移動並回到中間時,它不起作用。我試圖記錄消息,並沒有在控制檯中打印出來。 – coding22

+0

即使您沒有看到日誌消息,也可以始終設置斷點並查看'middleSlider.value'。如果你能看到這些值,我認爲這很明顯是怎麼回事。調試器是你的朋友,學習如何使用它! –

回答

2

你的應用程序正在實現一個非常不友好的用戶界面。您正在檢查滑塊的旋鈕是否爲,正好是中心的

即使在最好的情況下,這對任何人來說都是極其困難的。有一個像素,用戶將不得不擊中。

此外,根據滑塊的框架,用戶可能會或可能不會將旋鈕放在那裏,因爲旋鈕位置將被調整爲最接近的像素。這可能不可能精確到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

+0

感謝您的幫助,但我得到一個錯誤,說'二進制運算符<不能應用於類型爲Float和Double的操作數,並且對於<='操作數是相同的。 – coding22

+0

已編輯。你只需要告訴編譯器爲常量使用浮點數。沒什麼大不了。 –

+0

它完美的作品。謝謝! – coding22