2016-04-24 5 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

真ん中にスライダを正確に設定していますか?ブレークポイントやログメッセージを使って 'middleSlider.value'の値をチェックしてください。それは正確に1.0ですか? –

+0

これは、最初の設定では1に設定されています。しかし、スライダを左右に動かして中央に戻っても、それはうまく動作しません。私はメッセージを記録しようとしましたが、コンソールには何も表示されません。 – coding22

+0

ログメッセージが表示されない場合でも、いつでもブレークポイントを設定して、 'middleSlider.value'を見ることができます。あなたが値を見ることができれば、何が起こっているのかがはっきりしていると思います。デバッガはあなたの友人で、使い方を学びます! –

答えて

2

あなたのアプリは本当に不愉快なUIを実装しています。スライダーのつまみが中央での正確にであるかどうかを確認しています。

最高の場合であっても、これは誰にとっても非常に困難です。ユーザーがヒットしなければならないピクセルは1つだけです。

また、スライダのフレームによっては、ノブの位置が最も近いピクセルに調整されるため、ユーザーがノブをそこに置くことは可能かもしれません。正確に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 
} 

、真ん中の条件内部middleSlider.value = 1.0を呼び出します。

+0

助けてくれてありがとうございますが、 '二項演算子<は浮動小数点型と二重型のオペランドには適用できず、' <= 'オペランドも同じです。 – coding22

+0

が編集されました。浮動小数点定数を使用するようにコンパイラに指示するだけで済みます。大きな問題ではない。 –

+0

それは完全に動作します。ありがとうございました! – coding22