RSColourSlider
关于
RSColourSlider 可以让您的应用使用颜色选择功能。该颜色选择器以 普通滑动条 形式实现,对每个 iOS 用户来说都很熟悉。由于 RSColourSlider 继承自 UIView 类,因此安装和设置非常容易。您可以从 RSColourSlider 继承自己的类并更改滑动条的自定义子类中的元素,也可以在任意 UIViewController 子类的实例中运行时设置它。该界面元素被创建为简化版的 macOS 的 NSColorPicker 的 iOS 等效物。
特性
- 易于使用
- 可应用所有彩虹颜色
- 支持自动布局和 Storyboards
- 灵活的自定义化
要求
iOS 12.0+,Swift 5.0+
安装
RSColourSlider 通过 CocoaPods 提供使用。要安装它,只需将以下行添加到您的 Podfile:
platform :ios, '12.0'
use_frameworks!
pod 'RSColourSlider'
然后,在终端中运行 "install" 命令。
pod install
有关更多信息,请参阅 入门指南...
文档
首先导入框架。
import RSColourSlider
对象创建
可以按照传统方式,通过代码创建 RSColourSlider 的实例:
//example
let colourSlider = RSColourSlider(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 50))
self.view.addSubview(view)
也可以在 Storyboard 中将 UIView 拖动到您的 ViewController 中,在 identity inspector 中设置所选视图的 Class 和 Module 为 RSColourSlider,然后创建其 outlet。
@IBOutlet weak var colourSlider: RSColourSlider!
您必须将滑动条的 delegate 设置为 ViewController 的实例,以便在滑动条值变化时访问其代理方法。
//for example in viewDidLoad()
override func viewDidLoad() {
super.viewDidLoad()
colourSlider.delegate = self
}
代理
colourGotten(_:)
当滑动条的值变化时,获取 UIColor。
func colourGotten(colour: UIColor) {
self.view.backgroundColour = colour
}
colourValuesChanged(_:) //RGBA
从滑动条的值获取 RGBA 值。
func colourValuesChanged(to red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) {
print(red, green, blue, alpha) //For example
}
colourValuesChanged(_:) //HSBA
从滑动条的值获取 HSBA 值。
func colourValuesChanged(to hue: CGFloat, saturation: CGFloat, brightness: CGFloat, alpha: CGFloat) {
print(hue, saturation, brightness, alpha) //For example
}
有用的方法
getCurrentRGBAValues()
返回当前 RGBA 值的元组,当您通过另一个 UISlider 更改亮度、alpha 或饱和度时调用它,您想将当前选择颜色设置为某些 UI 元素或读取其值。
let rgbaValues = getCurrentRGBAValues()
print(rgbaValues.red, rgbaValues.green, rgbaValues.blue, rgbaValues.alpha)
getCurrentHSBAValues()
返回当前HSBA值的元组,如果您通过其他 UISlider 改变了亮度、透明度或饱和度,可以调用此函数,如果您想将当前选中的颜色设置到某个UI元素上或读取其值
let hsbaValues = getCurrentHSBAValues()
print(hsbaValues.hue, hsbaValues.saturation, hsbaValues.brightness, hsbaValues.alpha)
setSliderValueBy(colour: UIColor)
将滑块移动到选定的值,并通过传入颜色作为参数更新滑块
//for example in viewDidLoad()
override func viewDidLoad() {
super.viewDidLoad()
colourSlider.setSliderValueBy(colour: UIColor.blue)
}
setSliderValueByColourValues(hue: CGFloat, saturation: CGFloat, brightness: CGFloat, alpha: CGFloat)
将滑块移动到选定的值,并通过传入HSBA值作为参数更新滑块
//for example in viewDidLoad()
override func viewDidLoad() {
super.viewDidLoad()
colourSlider.setSliderValueByColourValues(hue: 0.5, saturation: 1, brightness: 1, alpha: 1)
}
TODO: setSliderValueByColourValues(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)
setCornerRadius(by value: CGFloat)
设置滑块圆角半径的安全方法
//for example in viewDidLoad()
override func viewDidLoad() {
super.viewDidLoad()
colourSlider.setCornerRadius(by: colourSlider.bounds.height / 2)
}
handlePanGesture(_ gestureRecognizer: UIPanGestureRecognizer)
处理滑块的移动,可以被重写
@objc open func handlePanGesture(_ gestureRecognizer: UIPanGestureRecognizer)
属性
delegate: RSColourSliderDelegate
触发代理的方法
public var delegate: RSColourSliderDelegate?
brightness: CGFloat
更改此值会影响滑块的亮度
open var brightness: CGFloat = 1.0 //defualt
saturation: CGFloat
更改此值会影响滑块的饱和度
open var saturation: CGFloat = 1.0 //default
alphaColourValue: CGFloat
更改此值会影响滑块的透明度
open var alphaColourValue: CGFloat = 1.0 //default
colourChosen: UIColor
滑块显示的当前颜色
public var colourChosen: UIColor = UIColor(hue: 0, saturation: 1, brightness: 1, alpha: 1) //default
thumbView: UIView!
滑块视图。可以被修改
public var thumbView: UIView!
ThumbView有如下值
//shadow
thumbView.layer.shadowColor = UIColor.black.cgColor
thumbView.layer.shadowOffset = .zero
thumbView.layer.shadowOpacity = 0.3
thumbView.layer.shadowRadius = 4.0
//borderWidth
thumbView.layer.borderWidth = 4
thumbView.layer.borderColor = UIColor.white.cgColor
thumbView.addGestureRecognizer(panGesture)
backgroundColouredView: UIView!
包含所有层和子视图的视图(不是thumbView)。此视图的宽度是当滑动控件计算色调值时的除数
public var backgroundColouredView: UIView!
RSColourView 继承自UIView并且可以使用UIView类的方法!
逻辑
值 | 最小值 | 最大值 | 色调 | 0 | 1 | 饱和度 | 0 | 1 | 亮度 | 0 | 1 | 透明度 | 0 | 1 |
许可
RSColourSlider可在MIT许可下使用。有关更多信息,请参阅LICENSE文件。