2017-10-16 1 views
0

Ich habe ein Problem, das mich für den letzten Tag wurde abgehört und ich kann einfach nicht die Lösung herauszufinden ...UISlider behandelt nicht .touchUpInside Ereignis richtig

Ich habe ein UISlider, die im Bereich von Werte 1 bis 3 (das ist die Art, wie wir es brauchen). Der Schieberegler ist kontinuierlich, da er einige Eigenschaften abhängig von seinem aktuellen Wert aktualisiert. Jetzt möchte ich eine Funktion implementieren, bei der der Schieberegler Aktionen auslöst, je nachdem, ob der Benutzer anfängt, sie zu berühren oder die Berührung beendet.

Ich versuchte mit der .touchDown-Methode, um den Beginn der Berührungen zu erkennen, was perfekt funktioniert. Wenn ich jedoch versuche, .touchUpInside und .touchUpOutside zu verwenden, um zu erkennen, wenn der Benutzer seinen Finger hebt, wird das Ereignis nicht zur richtigen Zeit ausgelöst.

Wenn ich den Finger in einiger Entfernung vom Startpunkt um den Schieberegler ziehe, wird das Ereignis ausgelöst. Aber wenn ich es nur kurz berühre oder es um einen winzigen Betrag herumbewege, wird das Bereinigungsereignis überhaupt nicht ausgelöst ...

Kann mir jemand dabei helfen? Hier ist der Code, den ich mit meinem Schieber einzurichten:

let slider: UISlider = { 
    let slider = UISlider() 
    slider.isContinuous = true 
    slider.minimumValue = 1 
    slider.maximumValue = 3 
    slider.setMinimumTrackImage(#imageLiteral(resourceName: "minimumSliderTrackImage").resizableImage(withCapInsets: UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)), for: .normal) 
    slider.setMaximumTrackImage(#imageLiteral(resourceName: "maximumSliderTrackImage").resizableImage(withCapInsets: UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)), for: .normal) 

    let sliderThumb = #imageLiteral(resourceName: "sliderThumbImage") 
    slider.setThumbImage(sliderThumb, for: .normal) 

    slider.addTarget(self, action: #selector(adjustPriceLabel), for: .valueChanged) 
    slider.addTarget(self, action: #selector(handleTouchDown), for: .touchDown) 
    slider.addTarget(self, action: #selector(handleTouchUp), for: [.touchUpInside, .touchUpOutside]) 

    slider.setValue(2.0, animated: true) 

    return slider 
}() 

@objc fileprivate func handleTouchDown() { 
    print(1234) 
} 

@objc fileprivate func handleTouchUp() { 
    print(5678) 
} 
+0

Also, was Sie sagen, dass Sie ist siehe 'handleTouchDown()' aufgerufen werden und manchmal 'handleTouchUp()' würde nicht aufgerufen werden oder? – Ladislav

+0

Genau. Genauer gesagt, handleTouchUp() wird nur aufgerufen, wenn ich den Schieberegler eine bestimmte Entfernung von seiner Startposition verschiebe ... –

+0

Kannst du versuchen, 'setMinimumTrackImage',' setMaximumTrackImage' und 'setThumbImage' zu ​​entfernen und erneut nach deinen benutzerdefinierten Thumb-Images zu suchen sind schuld? – Ladislav

Antwort

0

sollten Sie versuchen, das Hinzufügen .touchCancel Zustand zu handleTouchUp zu gehen und wie so:

slider.addTarget(self, action: #selector(handleTouchUp), for: [.touchUpInside, .touchUpOutside, .touchCancel]) 
Verwandte Themen