ARAPointSilder有两种类型
normal是可以滑动的
point是点击的也可以滑动,但是只可以停在点出
enum ARAPointSilderType: Int { case normal = 0 case point } 如何使用 let silder = ARAPointSilder() silder.bounds = CGRect(x: 0, y: 0, width: 300, height: 80) silder.center = view.center silder.type = .point silder.continuous = false silder.pointWidth = 20 silder.numberOfPoint = 4 silder.titleAttributes = [NSForegroundColorAttributeName: UIColor.red, NSFontAttributeName: UIFont(name: 'HelveticaNeue', size: 18)!] silder.titleArray = ['面议','报价','你看你','傻不傻'] silder.addTarget(self, action: #selector(printNumber(sender:)), for: .valueChanged) view.addSubview(silder) ARAPointSilder具有很多的属性// MARK: - 属性 /// 滑条的类型 var type: ARAPointSilderType = .normal /// 滑块的颜色 var thumbColor: UIColor = UIColor.white /// 滑块的图片 var thumbImage: UIImage? /// 滑块的大小 var thumbSize: CGSize = CGSize(width: 25, height: 25) /// 滑块的点击范围,默认是2倍 var thumbTouchRate: CGFloat = 2.0 /// 滑块边框颜色 var thumbBordColor: UIColor = UIColor.blue /// 类型为普通时,开题报告,开题报告,使用value var value: CGFloat = 0.0 { didSet { if value <= minimumValue { value = minimumValue } if value >= maximumValue { value = maximumValue } } } /// 最大值 var maximumValue:CGFloat = 1.0 /// 最小值 var minimumValue:CGFloat = 0.0 /// 最大值的滑动颜色 var maximumValueTrackColor: UIColor = UIColor.cyan /// 最小值的滑动颜色 var minimumValueTrackColor: UIColor = UIColor.red /// 值变化是否是连续的 var continuous: Bool = true /// 类型为点,使用index var index: Int = 0 { didSet { if index >= numberOfPoint { index = numberOfPoint - 1 } else if index < 0 { index = 0 } } } /// 点数的point数 默认是5级,最低是2级 var numberOfPoint: Int = 5 { didSet { if numberOfPoint < 2 { numberOfPoint = 2 } } } /// point点击范围,默认是point大小的2倍 pointTouchRate = 2 var pointTouchRate: CGFloat = 2.0 /// 设置point的颜色 var pointColor: UIColor = UIColor.cyan /// 设置Point的大小 var pointWidth: CGFloat? /// 设置slider的左右间隔 var margin: CGFloat = 30.0 /// 滑条的颜色 var lineColor: UIColor = UIColor.gray /// 设置滑条图片来显示 var lineImage: UIImage? /// 设置滑条的粗细程度 var lineWidth: CGFloat = 8.0 /// 滑条y偏移量,默认是0 var sliderOffset: CGFloat = 0 /// 标题y偏移,默认是向下偏移20 正数向下,负数向上 var titleOffset: CGFloat = 20 /// 设置point的下标题 var titleArray: [String]? /// 标题的字体 var titleFont: UIFont? /// 所有标题的颜色 var titleColor: UIColor? /// 每个标题的颜色 var titleColorArray: [UIColor]? /// 文字的属性 lazy var titleAttributes: [String:AnyObject] = { var dict = [String:AnyObject]() // 文字颜色 dict[NSForegroundColorAttributeName] = self.titleColor != nil ? self.titleColor : UIColor.lightGray // 文字大小 dict[NSFontAttributeName] = self.titleFont != nil ? self.titleFont : UIFont(name: 'HelveticaNeue', size: 14) return dict }() private var touchPoint: CGPoint = CGPoint.zero private var thumbPoint: CGPoint = CGPoint.zero private var thumbRect: CGRect = CGRect.zero private var pointRectArray: [NSValue] = [NSValue]() private var startPoint: CGFloat = 30 private var endPoint: CGFloat = 30 private var y: CGFloat = 0 private var isTap: Bool = false private var isRun: Bool = false 我通过重写override func draw(_ rect: CGRect) {}来实现显示这是监听方法override func beginTracking(_ touch: UITouch, with event: UIEvent?) -> Bool { touchPoint = touch.location(in: self) var tempThumbRect = thumbRect tempThumbRect.size.width = tempThumbRect.size.width * thumbTouchRate tempThumbRect.size.height = tempThumbRect.size.height * thumbTouchRate tempThumbRect.origin.x -= (tempThumbRect.size.width - thumbRect.size.width) / 2.0 tempThumbRect.origin.y -= (tempThumbRect.size.height - thumbRect.size.height) / 2.0 if type == .point { isTap = true for objc in pointRectArray { let oldRect = objc.cgRectValue var newRect = oldRect newRect.size.width = newRect.size.width * pointTouchRate newRect.size.height = newRect.size.height * pointTouchRate newRect.origin.x -= (newRect.size.width - oldRect.size.width) / 2.0 newRect.origin.y -= (newRect.size.height - oldRect.size.height) / 2.0 if newRect.contains(touchPoint) { thumbPoint = CGPoint(x: newRect.midX - thumbSize.width / 2.0, y: newRect.midY - thumbSize.height / 2.0) setNeedsDisplay() return true } } } else if type == .normal { return tempThumbRect.contains(touchPoint) } return false }github地址:
https://github.com/AnRanScheme/ARAPointSilder