MSCircularSlider
一个完全 IBDesignable
和 IBInspectable
的 iOS 应用程序圆形滑块
开始使用
MSCircularSlider 提供了一个流畅直观的接口,用于多功能的滑块 UIControl。整个库使用 Swift 5 编写,附带示例项目
安装
CocoaPods (推荐)
对于最新的 CocoaPods 版本
pod 'MSCircularSlider'
手动安装
只需克隆整个仓库,然后在MSCircularSlider
文件夹中提取文件,然后将它们导入到您的XCode项目中。
或使用以下简化的方法之一
GIT
- 切换到您的项目目录
- 使用
sparse-checkout
只将库文件拉取到您的项目目录中git init MSCircularSlider cd MSCircularSlider git remote add -f origin https://github.com/ThunderStruct/MSCircularSlider.git git config core.sparseCheckout true echo "MSCircularSlider/*" >> .git/info/sparse-checkout git pull --depth=1 origin master
- 将新拉取的文件导入到XCode项目中
SVN
- 切换到您的项目目录
- 检出库文件
svn checkout https://github.com/ThunderStruct/MSCircularSlider/trunk/MSCircularSlider
- 将新检出的文件导入到XCode项目中
使用方法
初始化
大多数成员是IBInspectable
,提供多种完整初始化方式;通过Interface Builder
或通过编程方式
Interface Builder初始化
编程初始化
以下代码实例化了并初始化了滑块,使其与上面IB示例中的滑块相同
let frame = CGRect(x: view.center.x - 200, y: view.center.y - 200, width: 400, height 400) // center in superview
let slider = MSCircularSlider(frame: frame)
slider.currentValue = 60.0
slider.maximumAngle = 300.0
slider.filledColor = UIColor(red: 127 / 255.0, green: 168 / 255.0, blue: 198 / 255.0, alpha: 1.0)
slider.unfilledColor = UIColor(red: 80 / 255.0, green: 148 / 255.0, blue: 95 / 255.0, alpha: 1.0)
slider.handleType = .doubleCircle
slider.handleColor = UIColor(red: 35 / 255.0, green: 69 / 255.0, blue: 96 / 255.0, alpha: 1.0)
slider.handleEnlargementPoints = 12
slider.labels = ["1", "2", "3", "4", "5"]
view.addSubview(slider!)
成员和方法
MSCircularSlider
delegate
:接受一个符合MSCircularSliderDelegate的类,并处理代理 - 默认为nil- 注意:请查看下面的协议部分以获取有关使用的抽象代理模型的更多信息
minimumValue
:滑块在0°角度时取的值 - 默认为0.0maximumValue
:滑块在最大角度最大angle时的值 - 默认为100.0currentValue
:滑块在当前位置角度时的值 - 默认为0.0maximumAngle
:弧的最大角度(360° = 全圈) - 默认为360.0sliderPadding
:帧和绘制滑块之间的填充(可以通过扩展框架并增加填充来防止标签剪裁) - 默认为0.0lineWidth
:弧的线宽 - 默认为5filledColor
:显示在手柄“填充”部分的颜色 - 默认为.darkGreyunfilledColor
:显示在圆形“未填充”部分的颜色 - 默认为.lightGreyrotationAngle
:整个滑块视图的旋转变换角度 - 默认计算使得间隙 facing downwards- 注意:滑块对其所有子视图添加了反转的旋转变换,以取消任何应用的旋转
handleType
:指示手柄的类型 - 默认为.largeCirclehandleColor
:手柄的颜色 - 默认为.darkGreyhanldeImage
:手柄的图片 - 默认为nilhandleEnlargementPoints
:手柄比lineWidth大的点数 - 默认为10- 注意:此属性仅适用于类型为.largeCircle或.doubleCircle的手柄
handleHighlightable
:指示手柄在按下时是否应突出显示(变为半透明) - 默认为truehandleRotatable
:指定手柄是否应旋转以始终指向外部 - 默认为falselabels
:包含所有要均匀显示的标签的字符串数组 - 默认为[]- 注意:除非通过赋值运算符(=)进行更改,否则对数组的任何更改都不会立即应用。要执行更改,请使用以下提供的方法
labelColor
:应用于显示标签的颜色 - 默认为.blacksnapToLabels
:指示手柄在手柄释放时应否捕捉到最近的标签 - 默认为falselabelFont
:应用于显示标签的字体 - 默认为.systemFont(ofSize: 12)labelOffset
:标签推动离开滑块中心的点数 - 默认为0.0- 注意:可以用负数来将标签绘制向中心方向
markerCount
:指示要均匀显示的标记数量 - 默认为0markerColor
:应用于显示标记的颜色 - 默认为.darkGreymarkerPath
:一个可选的 UIBezierPath,用于绘制自定义形状的标记而非标准椭圆标记 - 默认值为 nilmarkerImage
:一个可选的 UIImage,用于代替标准椭圆标记 - 默认值为 nil- 注:markerPath 比 markerImage 优先级更高,因此如果两者都设置了,则不会绘制图像
snapToMarkers
:指示在释放操作杆后是否操作杆应 吸附 到最近的标记 - 默认值为 false注:如果 snapToMarkers 和 snapToLabels 都为 true,则操作杆将吸附到最近的标记在 1.1.0 中移除了互斥
slidingDirection
:指示当前操作杆的滑动方向 - 默认值 .nonerevolutionsCount
:指示操作杆旋转的次数(需要maximumAngle
= 360) - 默认 0maximumRevolutions
:指定滑动条在低于 100% 之前的最大旋转次数(angle
= 360.0) - 默认 -1- 注:此属性仅在
maximumAngle = 360.0
时有效,它还通过将顺时针滑动限制在 0%(angle
= 0.0)和revolutionsCount
= 0 来防止负旋转。将此属性设置为任何负值将允许滑动条无限旋转
- 注:此属性仅在
addLabel(_ string: String)
:向标签数组添加一个字符串并触发所需的绘图方法changeLabel(at index: Int, string: String)
:将给定索引处的标签字符串替换为提供的字符串removeLabel(at index: Int)
:从给定索引处的标签数组中移除字符串
MSDoubleHandleCircularSlider
继承自 MSCircularSlider,有以下不同之处
delegate
:接受一个符合 MSDoubleHandleCircularSliderDelegate 的类并处理委托 - 默认值为 nil- 注意:请查看下面的协议部分以获取有关使用的抽象代理模型的更多信息
minimumHandlesDistance
:指示两个操作杆之间的最小弧长 - 默认值为 10.0secondCurrentValue
:第二个操作杆的当前值 - 默认从 60° 角度计算得出secondHandleType
:指示第二个操作杆的类型 - 默认为 .largeCirclesecondHandleColor
:第二个操作杆的颜色 - 默认为 .darkGreysecondHandleImage
:第二个操作杆的图像 - 默认为 nilsecondHandleEnlargementPoints
:第二个操作杆比 lineWidth 大的点数 - 默认为 10- 注意:此属性仅适用于类型为.largeCircle或.doubleCircle的手柄
secondHandleHighlightable
:指示第二个操作杆在被按下时是否应 突出显示(变为半透明) - 默认为 truesecondHandleRotatable
:指定第二个操作杆是否应旋转始终朝外指向 - 默认为 falsesnapToLabels
:指示两个操作杆在释放操作杆时应否 吸附 到最近的标记 - 默认值为 false -在 1.3.0 中已覆盖且不可用在 1.3.0 中可用snapToMarkers
:指示两个操作杆在释放操作杆时应否 吸附 到最近的标记 - 默认值为 false -已覆盖且不可用在 1.3.0 中可用
MSGradientCircularSlider
继承自 MSCircularSlider,有以下不同之处
gradientColors
:用于计算渐变的颜色数组(按照数组中的顺序)- 默认值[.lightGray, .blue, .darkGray]- 注意:除非通过赋值运算符(=)进行更改,否则对数组的任何更改都不会立即应用。要执行更改,请使用以下提供的方法
addColor(_ color: UIColor)
:向渐变颜色数组中添加颜色并触发必要的绘图方法changeColor(at index: Int, newColor: UIColor)
:用提供的newColor替换给定索引处的颜色removeColor(at index: Int)
:从给定的索引处移除渐变颜色数组中的颜色
协议和枚举
在MSCircularSlider库中使用了三个协议
MSCircularSliderProtocol
一个内部协议,仅作为没有定义方法的抽象超类。在所有类中公开的只有一个成员 delegate
,其类型为 MSCircularSliderProtocol,并相应地转换为另一个协议
MSCircularSliderDelegate
继承自MSCircularSliderProtocol并包含所有由MSCircularSlider和MSGradientCircularSlider使用的属性(以下文档化)
-
circularSlider(_ slider: MSCircularSlider, valueChangedTo value: Double, fromUser: Bool)
:在当前值改变时调用,提供一个fromUser Bool值,指示值是否由用户(通过滚动控件)或其他方式(通过编程或等 -currentValue = 20
)更改 -
circularSlider(_ slider: MSCircularSlider, startedTrackingWith value: Double)
:指示控件开始滚动 -
circularSlider(_ slider: MSCircularSlider, endedTrackingWith value: Double)
:指示滑块的控件被释放 -
circularSlider(_ slider: MSCircularSlider, directionChangedTo value: MSCircularSliderDirection)
:指示用户当前滑动的方向 -
circularSlider(_ slider: MSCircularSlider, revolutionsChangedTo value: Int)
:指示控件已经绕整个滑块旋转了多少次(仅对于maximumAngle
= 360.0 / 全圆有效)
MSDoubleHandleCircularSliderDelegate
继承自MSCircularSliderProtocol,仅由MSDoubleHandleCircularSlider使用
-
circularSlider(_ slider: MSCircularSlider, valueChangedTo firstValue: Double, secondValue: Double, isFirstHandle: Bool?, fromUser: Bool)
: 当两个当前值中的任何一个发生变化时被调用,提供了一个isFirstHandle布尔值,指示变化是否来自第一个或第二个柄 -
circularSlider(_ slider: MSCircularSlider, startedTrackingWith firstValue: Double, secondValue: Double, isFirstHandle: Bool)
: 表示柄开始滚动 -
circularSlider(_ slider: MSCircularSlider, endedTrackingWith firstValue: Double, secondValue: Double, isFirstHandle: Bool)
: 表示活动滑块的柄被释放
MSCircularSliderDirection
用于指示用户当前拨动的方向
.none
.clockwise
.counterclockwise
Todos
- 消除
snapToLabels
和snapToMarkers
之间的互斥 - 为
MSDoubleHandleCircularSlider
添加吸附功能 - 在
MSDoubleHandleCircularSlider
中为第二个柄添加独立的成员,以分别定制每个柄 - 添加一个指定滑块不同表面处理的
MSCircularSliderMaterial
枚举,包括- 有光泽
- 哑光
- 珍珠光泽
- 添加一个具有可选动画参数的
setValue
方法
许可
该项目受MIT许可协议保护 - 有关详情,请参阅LICENSE文件