ARAPointSilder有兩種類型
- normal是可以滑動的
- point是點(diǎn)擊的也可以滑動,但是只可以停在點(diǎn)出
enum ARAPointSilderType: Int {
case normal = 0
case point
}
如何使用

Untitled 下午1.27.07.gif
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 的鏈接,如果接的還好的話就給個星星吧!
ARAPointSilder具有很多的屬性
// MARK: - 屬性
/// 滑條的類型
var type: ARAPointSilderType = .normal
/// 滑塊的顏色
var thumbColor: UIColor = UIColor.white
/// 滑塊的圖片
var thumbImage: UIImage?
/// 滑塊的大小
var thumbSize: CGSize = CGSize(width: 25, height: 25)
/// 滑塊的點(diǎn)擊范圍,默認(rèn)是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
/// 值變化是否是連續(xù)的
var continuous: Bool = true
/// 類型為點(diǎn),使用index
var index: Int = 0 {
didSet {
if index >= numberOfPoint {
index = numberOfPoint - 1
} else if index < 0 {
index = 0
}
}
}
/// 點(diǎn)數(shù)的point數(shù) 默認(rèn)是5級,最低是2級
var numberOfPoint: Int = 5 {
didSet {
if numberOfPoint < 2 {
numberOfPoint = 2
}
}
}
/// point點(diǎn)擊范圍,默認(rèn)是point大小的2倍 pointTouchRate = 2
var pointTouchRate: CGFloat = 2.0
/// 設(shè)置point的顏色
var pointColor: UIColor = UIColor.cyan
/// 設(shè)置Point的大小
var pointWidth: CGFloat?
/// 設(shè)置slider的左右間隔
var margin: CGFloat = 30.0
/// 滑條的顏色
var lineColor: UIColor = UIColor.gray
/// 設(shè)置滑條圖片來顯示
var lineImage: UIImage?
/// 設(shè)置滑條的粗細(xì)程度
var lineWidth: CGFloat = 8.0
/// 滑條y偏移量,默認(rèn)是0
var sliderOffset: CGFloat = 0
/// 標(biāo)題y偏移,默認(rèn)是向下偏移20 正數(shù)向下,負(fù)數(shù)向上
var titleOffset: CGFloat = 20
/// 設(shè)置point的下標(biāo)題
var titleArray: [String]?
/// 標(biāo)題的字體
var titleFont: UIFont?
/// 所有標(biāo)題的顏色
var titleColor: UIColor?
/// 每個標(biāo)題的顏色
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) {}來實(shí)現(xiàn)顯示
這是監(jiān)聽方法
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
}