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:
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:
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)