MSCircularSlider 1.3.2

MSCircularSlider 1.3.2

测试已测试
语言语言 SwiftSwift
许可 MIT
发布上次发布2020年4月
SPM支持 SPM

ThunderStruct 维护。



  • ThunderStruct

MSCircularSlider

Build Status Platform CocoaPods License

一个完全 IBDesignableIBInspectable 的 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.0
  • maximumValue:滑块在最大角度最大angle时的值 - 默认为100.0
  • currentValue:滑块在当前位置角度时的值 - 默认为0.0
  • maximumAngle:弧的最大角度(360° = 全圈) - 默认为360.0
  • sliderPadding:帧和绘制滑块之间的填充(可以通过扩展框架并增加填充来防止标签剪裁) - 默认为0.0
  • lineWidth:弧的线宽 - 默认为5
  • filledColor:显示在手柄“填充”部分的颜色 - 默认为.darkGrey
  • unfilledColor:显示在圆形“未填充”部分的颜色 - 默认为.lightGrey
  • rotationAngle:整个滑块视图的旋转变换角度 - 默认计算使得间隙 facing downwards
    • 注意:滑块对其所有子视图添加了反转的旋转变换,以取消任何应用的旋转
  • handleType:指示手柄的类型 - 默认为.largeCircle
  • handleColor:手柄的颜色 - 默认为.darkGrey
  • hanldeImage:手柄的图片 - 默认为nil
  • handleEnlargementPoints:手柄比lineWidth大的点数 - 默认为10
    • 注意:此属性仅适用于类型为.largeCircle或.doubleCircle的手柄
  • handleHighlightable:指示手柄在按下时是否应突出显示(变为半透明) - 默认为true
  • handleRotatable:指定手柄是否应旋转以始终指向外部 - 默认为false
  • labels:包含所有要均匀显示的标签的字符串数组 - 默认为[]
    • 注意:除非通过赋值运算符(=)进行更改,否则对数组的任何更改都不会立即应用。要执行更改,请使用以下提供的方法
  • labelColor:应用于显示标签的颜色 - 默认为.black
  • snapToLabels:指示手柄在手柄释放时应否捕捉到最近的标签 - 默认为false
  • labelFont:应用于显示标签的字体 - 默认为.systemFont(ofSize: 12)
  • labelOffset:标签推动离开滑块中心的点数 - 默认为0.0
    • 注意:可以用负数来将标签绘制向中心方向
  • markerCount:指示要均匀显示的标记数量 - 默认为0
  • markerColor:应用于显示标记的颜色 - 默认为.darkGrey
  • markerPath:一个可选的 UIBezierPath,用于绘制自定义形状的标记而非标准椭圆标记 - 默认值为 nil
  • markerImage:一个可选的 UIImage,用于代替标准椭圆标记 - 默认值为 nil
    • 注:markerPath 比 markerImage 优先级更高,因此如果两者都设置了,则不会绘制图像
  • snapToMarkers:指示在释放操作杆后是否操作杆应 吸附 到最近的标记 - 默认值为 false
    • 注:如果 snapToMarkers 和 snapToLabels 都为 true,则操作杆将吸附到最近的标记 在 1.1.0 中移除了互斥
  • slidingDirection:指示当前操作杆的滑动方向 - 默认值 .none
  • revolutionsCount:指示操作杆旋转的次数(需要 maximumAngle = 360) - 默认 0
  • maximumRevolutions:指定滑动条在低于 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.0
  • secondCurrentValue:第二个操作杆的当前值 - 默认从 60° 角度计算得出
  • secondHandleType:指示第二个操作杆的类型 - 默认为 .largeCircle
  • secondHandleColor:第二个操作杆的颜色 - 默认为 .darkGrey
  • secondHandleImage:第二个操作杆的图像 - 默认为 nil
  • secondHandleEnlargementPoints:第二个操作杆比 lineWidth 大的点数 - 默认为 10
    • 注意:此属性仅适用于类型为.largeCircle或.doubleCircle的手柄
  • secondHandleHighlightable:指示第二个操作杆在被按下时是否应 突出显示(变为半透明) - 默认为 true
  • secondHandleRotatable:指定第二个操作杆是否应旋转始终朝外指向 - 默认为 false
  • snapToLabels:指示两个操作杆在释放操作杆时应否 吸附 到最近的标记 - 默认值为 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

  • 消除snapToLabelssnapToMarkers之间的互斥
  • MSDoubleHandleCircularSlider添加吸附功能
  • MSDoubleHandleCircularSlider中为第二个柄添加独立的成员,以分别定制每个柄
  • 添加一个指定滑块不同表面处理MSCircularSliderMaterial枚举,包括
    • 有光泽
    • 哑光
    • 珍珠光泽
  • 添加一个具有可选动画参数的setValue方法

许可

该项目受MIT许可协议保护 - 有关详情,请参阅LICENSE文件