2016-04-24 11 views
0

Ich habe dieses UISlider, der die Lautstärke der Musik steuert. Wenn sich der Daumen in der Mitte befindet, ist die Lautstärke der Musik auf 1 eingestellt und sollte abgespielt werden. Das Problem, das ich habe, ist, dass es spielt, aber sobald ich den Daumen nach rechts oder links bewege und versuche, den Daumen zurück in die Mitte zu bewegen, kann ich keine Musik hören. Es funktioniert, wenn ich nach links oder rechts gehe und die Musik für beide AVPlayer abspielt, außer wenn der Schieberegler in der Mitte ist. Vielen Dank im Voraus!Wie kommt es, dass die Musiklautstärke nicht spielt, wenn sich mein Schieberegler in der Mitte befindet?

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

Sind Sie sicher, dass Sie den Schieberegler _exactly_ in der Mitte einstellen? Überprüfen Sie den Wert von 'middleSlider.value' mithilfe eines Haltepunkts oder einer Protokollnachricht. Ist es genau 1,0? –

+0

Es funktioniert am Anfang, wenn es auf 1 gesetzt wird. Aber wenn ich den Schieberegler nach rechts oder links bewege und zurück in die Mitte gehe, funktioniert es nicht. Ich habe versucht, eine Nachricht zu protokollieren, und in der Konsole wird nichts ausgegeben. – coding22

+0

Auch wenn Sie keine Protokollnachrichten sehen, können Sie immer einen Haltepunkt setzen und 'middleSlider.value' betrachten. Wenn Sie die Werte sehen könnten, wäre es ziemlich offensichtlich, was passiert. Der Debugger ist dein Freund, lerne, wie man es benutzt! –

Antwort

2

Ihre App implementiert eine wirklich unfreundliche Benutzeroberfläche. Sie überprüfen, ob der Schieberegler des Schiebereglers genau in der Mitte ist.

Selbst im besten Fall wird dies für jeden extrem schwierig sein. Es gibt genau ein Pixel, das der Benutzer treffen muss.

Je nach Rahmen des Sliders ist es für den Benutzer möglicherweise auch möglich, den Knopf dort zu platzieren, da die Knopfposition auf den nächsten Pixel eingestellt wird. Es kann unmöglich sein, 1.0 genau zu treffen - die nächsten möglichen Positionen könnten etwas über und unter 1.0 liegen.

Anstatt genau nach 1.0 zu suchen, sollten Sie nach Werten innerhalb eines Grenzwerts von 1,0 suchen.

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 
} 

Wenn Sie den Regler „Snap“ ins Zentrum sehen möchten, rufen middleSlider.value = 1.0 innerhalb des mittleren Zustand.