ios – 如何在Swift中实现范围滑块

前端之家收集整理的这篇文章主要介绍了ios – 如何在Swift中实现范围滑块前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试实现Range Slider,我使用了名为 NMRangeSlider自定义控件.

但是当我使用它时,滑块根本不会出现.难道也是因为它都是用Objective-C编写的吗?

这就是我目前的实现方式:

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

解决方法

更新:

它没有向我展示,因为它全是白色的.所以解决方案,不使用任何其他框架并坚持使用这个 – 您需要为所有组件设置所有视图,然后它将显示良好:

我曾尝试在Swift中导入它,因为我之前在Objective-C代码中使用它,但没有任何运气.如果我正确设置了所有内容并将其添加到viewDidLoad()或viewDidAppear()中,则不会显示任何内容.但有一点值得一提 – 当我进入View Debug Hierarchy时,滑块实际上就在画布上:

但是在将其添加到视图之前,它根本没有使用我设置的所有颜色进行渲染.为了记录 – 这是我使用的代码

  1. override func viewDidAppear(animated: Bool) {
  2. var rangeSlider = NMRangeSlider(frame: CGRectMake(50,50,34))
  3. rangeSlider.lowerValue = 0.54
  4. rangeSlider.upperValue = 0.94
  5.  
  6. let range = 10.0
  7. let oneStep = 1.0 / range
  8. let minRange: Float = 0.05
  9. rangeSlider.minimumRange = minRange
  10.  
  11. let bgImage = UIView(frame: rangeSlider.frame)
  12. bgImage.backgroundColor = .greenColor()
  13. rangeSlider.trackImage = bgImage.pb_takeSnapshot()
  14.  
  15. let trackView = UIView(frame: CGRectMake(0,rangeSlider.frame.size.width,29))
  16. trackView.backgroundColor = .whiteColor()
  17. trackView.opaque = false
  18. trackView.alpha = 0.3
  19. rangeSlider.trackImage = UIImage(named: "")
  20.  
  21. let lowerThumb = UIView(frame: CGRectMake(0,8,29))
  22. lowerThumb.backgroundColor = .whiteColor()
  23. let lowerThumbHigh = UIView(frame: CGRectMake(0,29))
  24. lowerThumbHigh.backgroundColor = UIColor.blueColor()
  25.  
  26. rangeSlider.lowerHandleImageNormal = lowerThumb.pb_takeSnapshot()
  27. rangeSlider.lowerHandleImageHighlighted = lowerThumbHigh.pb_takeSnapshot()
  28. rangeSlider.upperHandleImageNormal = lowerThumb.pb_takeSnapshot()
  29. rangeSlider.upperHandleImageHighlighted = lowerThumbHigh.pb_takeSnapshot()
  30.  
  31. self.view.addSubview(rangeSlider)
  32.  
  33. self.view.backgroundColor = .lightGrayColor()
  34. }

使用this question中提到的捕获UIVmage作为UIImage的方法

  1. extension UIView {
  2. func pb_takeSnapshot() -> UIImage {
  3. UIGraphicsBeginImageContextWithOptions(bounds.size,false,UIScreen.mainScreen().scale)
  4. drawViewHierarchyInRect(self.bounds,afterScreenUpdates: true)
  5. let image = UIGraphicsGetImageFromCurrentImageContext()
  6. UIGraphicsEndImageContext()
  7. return image
  8. }
  9. }

其他方案:

您也可以尝试使用sgwilly/RangeSlider,它是用Swift编写的,因此您甚至不需要桥接标题.

猜你在找的iOS相关文章