[FIXED] So implementieren Sie den Range-Slider in Swift

Ausgabe

Ich versuche, Range Slider zu implementieren, und ich habe ein benutzerdefiniertes Steuerelement namens NMRangeSlider verwendet .

Aber wenn ich es benutze, erscheint der Schieberegler überhaupt nicht. Könnte es auch daran liegen, dass alles in Objective-C geschrieben ist?

So habe ich es aktuell umgesetzt:

var rangeSlider = NMRangeSlider(frame: CGRectMake(16, 6, 275, 34))
rangeSlider.lowerValue = 0.54
rangeSlider.upperValue = 0.94
self.view.addSubview(rangeSlider)

Lösung

AKTUALISIEREN:

Es zeigte sich mir nicht, weil es ganz weiß war. Also die Lösung, ohne ein anderes Framework zu verwenden und bei diesem zu bleiben – Sie müssen alle Ansichten für alle Komponenten festlegen und dann wird es gut angezeigt:

Geben Sie hier die Bildbeschreibung ein


Ich habe versucht, es in Swift zu importieren, wie ich es zuvor im Objective-C-Code verwendet habe, aber ohne Erfolg. viewDidLoad()Wenn ich alles richtig einstelle und es entweder in oder hinzufüge viewDidAppear(), wird nichts angezeigt. Eine Sache ist jedoch erwähnenswert – wenn ich View Debug Hierarchy betrete , befindet sich der Schieberegler tatsächlich auf der Leinwand:

Geben Sie hier die Bildbeschreibung ein

Aber es wird einfach nicht mit allen Farben gerendert, die ich eingestellt habe, bevor ich es der Ansicht hinzugefügt habe. Für die Aufzeichnung – dies ist der Code, den ich verwendet habe:

override func viewDidAppear(animated: Bool) {
    var rangeSlider = NMRangeSlider(frame: CGRectMake(50, 50, 275, 34))
    rangeSlider.lowerValue = 0.54
    rangeSlider.upperValue = 0.94
    
    let range = 10.0
    let oneStep = 1.0 / range
    let minRange: Float = 0.05
    rangeSlider.minimumRange = minRange
    
    let bgImage = UIView(frame: rangeSlider.frame)
    bgImage.backgroundColor = .greenColor()
    rangeSlider.trackImage = bgImage.pb_takeSnapshot()
    
    let trackView = UIView(frame: CGRectMake(0, 0, rangeSlider.frame.size.width, 29))
    trackView.backgroundColor = .whiteColor()
    trackView.opaque = false
    trackView.alpha = 0.3
    rangeSlider.trackImage = UIImage(named: "")
    
    let lowerThumb = UIView(frame: CGRectMake(0, 0, 8, 29))
    lowerThumb.backgroundColor = .whiteColor()
    let lowerThumbHigh = UIView(frame: CGRectMake(0, 0, 8, 29))
    lowerThumbHigh.backgroundColor = UIColor.blueColor()
    
    rangeSlider.lowerHandleImageNormal = lowerThumb.pb_takeSnapshot()
    rangeSlider.lowerHandleImageHighlighted = lowerThumbHigh.pb_takeSnapshot()
    rangeSlider.upperHandleImageNormal = lowerThumb.pb_takeSnapshot()
    rangeSlider.upperHandleImageHighlighted = lowerThumbHigh.pb_takeSnapshot()
    
    self.view.addSubview(rangeSlider)

    self.view.backgroundColor = .lightGrayColor()
}

Verwenden der in dieser Frage erwähnten Methode zum Erfassen der UIView als UIImage :

extension UIView {
    func pb_takeSnapshot() -> UIImage {
        UIGraphicsBeginImageContextWithOptions(bounds.size, false, UIScreen.mainScreen().scale)
        drawViewHierarchyInRect(self.bounds, afterScreenUpdates: true)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image
    }
}

Andere Lösung:

Sie können stattdessen auch sgwilly/RangeSlider ausprobieren , es ist in Swift geschrieben und daher benötigen Sie nicht einmal einen Bridging Header.


Beantwortet von –
Michal


Antwort geprüft von –
Willingham (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like