123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372 |
- //
- // IHLightColorView.swift
- // Inhealth
- //
- // Created by weclouds on 2020/8/21.
- // Copyright © 2020 weclouds. All rights reserved.
- //
- import UIKit
- class IHLightColorView: UIView {
- //调色结果
- var paletteComplition:((ColorStruct)->Void)?
- fileprivate var gradientLayer :IHGradientLayer?
- @IBOutlet weak var brightnessBtn: UIButton!
- @IBOutlet weak var colorValueBtn: UIButton!
- @IBOutlet weak var touchView: UIImageView!
- @IBOutlet weak var brightThumb: UIImageView!
- @IBOutlet weak var colorThumb: UIImageView!
- @IBOutlet weak var brightnessPickerView: UIView!
-
- @IBOutlet weak var colorPickerView: IHColorPickerView!
-
-
- @IBOutlet weak var lampInfoBox: UIView!
- var isVerticalMove :Bool! = false // 纵轴移动
- {
- didSet{
- if self.isVerticalMove == true {
- self.colorPickerView.isHidden = true
- self.colorThumb.isHidden = true
- self.brightnessPickerView.isHidden = false
- self.brightThumb.isHidden = false
- }else {
- self.colorPickerView.isHidden = true
- self.colorThumb.isHidden = true
- self.brightnessPickerView.isHidden = true
- self.brightThumb.isHidden = true
- }
- }
- }
- var isHorizontalMove :Bool! = false //横轴移动
- {
- didSet{
- if self.isHorizontalMove == true {
- self.colorPickerView.isHidden = false
- self.colorThumb.isHidden = false
- self.brightnessPickerView.isHidden = true
- self.brightThumb.isHidden = true
- }else {
- self.colorPickerView.isHidden = true
- self.colorThumb.isHidden = true
- self.brightnessPickerView.isHidden = true
- self.brightThumb.isHidden = true
- }
- }
- }
- var isLock:Bool? = false //加一把锁 保证单独执行
- let horizontalSensitivity : CGFloat = 30 //水平灵敏度
- let sensitivity : CGFloat = 50 //灵敏度 移动的又有效距离 / sensitivity
- let beginY :CGFloat? = (KSCREENHEIGHT - 400 ) / 2
- let endY :CGFloat? = (KSCREENHEIGHT - 400 ) / 2 + 400
- let colorPickerWidth = KSCREENWIDTH - 80
- var beginPoint : CGPoint?
- var movePoint : CGPoint?
- var isMove:Bool! = false
- var finalColor:ColorStruct?
- var currentColor:ColorStruct?{
- didSet{
- if let color = self.currentColor {
- let curColor = UIColor(red: color.Red!, green: color.Green!, blue: color.Blue!)
- _fill(curColor!) //填充当前颜色
- colorValueBtn.setTitle("R:\(color.Red!) G:\(color.Green!) B:\(color.Blue!)", for: .normal)
- // self.finalColor = color //赋初值 ,如果没有处理,最后就是这个值
- }
- }
- }
- var colors :[CGColor]? = [CGColor](){
- didSet{
- // self.setNeedsDisplay()
- if let colors = self.colors {
- drawColor(colors)
- }
-
- }
- }
- var hvalue:CGFloat? = 0{
- didSet{
- if let hvalue = self.hvalue {
- let color = UIColor(hue: hvalue, saturation: 1, brightness: self.brightness ?? 1, alpha: 1)
- setViewColor(color)
- currentColor(color)
- }
-
- }
- }
- //颜色亮度
- var brightness :CGFloat?
- var bright : CGFloat?{
- didSet{
- if let bright = self.bright {
- self.brightThumb.center.y = (bright )
- let result = (400 - (bright - beginY!) ) / 400 * 100
- self.brightnessBtn.setTitle("\(Int(result))%", for: .normal)
- self.brightness = result / 100
- setColorBrightness(result / 100)
-
- }
-
- }
- }
-
- var color : CGFloat?{
- didSet{
- if let color = self.color {
- self.colorThumb.center.x = color
-
- self.hvalue = (color - 40) / colorPickerWidth
- }
- }
- }
- override func awakeFromNib() {
- super.awakeFromNib()
-
- _fill(UIColor.red)//默认
- gradientLayer = IHGradientLayer()
- gradientLayer?.frame = self.bounds
- self.layer.insertSublayer(gradientLayer!, at: 0)
- }
- func setupUI() {
- brightnessBtn.layoutButton(style: .Left, imageTitleSpace: 10)
- colorValueBtn.layoutButton(style: .Left
- , imageTitleSpace: 10)
- }
- override func draw(_ rect: CGRect) {
- // colors = [UIColor.white.cgColor,UIColor.blue.cgColor]
- // if self.colors?.count == 2 {
- // drawColor(self.colors!)
- // }else{
- // let firstColor = UIColor(red: 1, green: 0, blue: 0, alpha: 0.12)
- // let secondColor = UIColor(red: 1, green: 0, blue: 0, alpha: 1)
- // drawColor([firstColor.cgColor,secondColor.cgColor])
- // }
- }
-
- override func layoutSubviews() {
- super.layoutSubviews()
- }
-
- }
- extension IHLightColorView{
- override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
-
- let touch : UITouch! = touches.first
- self.beginPoint = touch.location(in: self)
- self.touchView.isHidden = false
- self.touchView.center = self.beginPoint!
-
-
- }
- override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
-
- UIView.animate(withDuration: 2) {
- self.reset()
- }
- }
-
- override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
- UIView.animate(withDuration: 2) {
- self.reset()
- }
- }
-
- override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
- //显示控件
- self.touchView.isHidden = false
- self.lampInfoBox.isHidden = false
-
- let touch : UITouch! = touches.first
- self.movePoint = touch.location(in: self)
- let previousPoint = touch.previousLocation(in: self)
- let directX = movePoint!.x - previousPoint.x
- let directY = movePoint!.y - previousPoint.y
- self.touchView.center = self.movePoint!
- let height = movePoint!.y - beginPoint!.y
- let width = beginPoint!.x - movePoint!.x
- let rads = atan(height/width);
- let degrees = 180.0 * Double(rads) / .pi
- let deltaDegrees = abs(degrees) //角度的d绝对值 小与45度的时候 判定为 横向滑动 ;大于或者等于45度判定为纵向滑动
- // log.debug(deltaDegrees)
- if deltaDegrees.isNaN == false { //排除度数为0的情况
- if deltaDegrees < 45 {
- if isLock == false { //如果是开锁 则可以进来判断是否可以移动 ,
- isLock = true //进来之后就上锁
- isHorizontalMove = true
- isVerticalMove = false
- }
- }else{
- if isLock == false {
- isLock = true
- isHorizontalMove = false
- isVerticalMove = true
- }
- }
- }else{
- //起始点跟移动的点在同一点的时候, 就会产生nan
- //log.debug("movePoint = \(movePoint) - beginPoint = \(beginPoint)")
- }
-
- if isHorizontalMove == true{ // 水平滑动
- // log.debug(changeX)
- isMove = true
- self.colorPickerView.isHidden = false
- self.brightnessPickerView.isHidden = true
- self.colorThumb.isHidden = false
- self.brightThumb.isHidden = true
- color! += (directX )
- if color! > (self.colorPickerView.frame.maxX) {
- color = 40
- }
- if color! < 40 {
- color = self.colorPickerView.frame.maxX
- }
- }
- if isVerticalMove == true { //垂直移动
-
- isMove = true
- self.brightThumb.isHidden = false
- self.colorPickerView.isHidden = true
- self.brightnessPickerView.isHidden = false
- self.colorThumb.isHidden = true
- bright! += (directY ) //弹性系数
- if bright! < beginY! {
- bright = beginY
- }
- if bright! > endY!{
- bright = endY
- }
- }
- }
-
- }
- extension IHLightColorView{
- fileprivate func setViewColor(_ color :UIColor) {
- self.colors = [getAlphaColor(color).cgColor,color.cgColor]
- }
- fileprivate func setColorBrightness(_ brightness:CGFloat){
- if let hvalue = self.hvalue {
- let color = UIColor(hue: hvalue, saturation: 1, brightness: brightness, alpha: 1)
- self.colors = [getAlphaColor(color).cgColor,color.cgColor]
- currentColor(color)
- }
- }
-
- fileprivate func drawColor(_ colors:[CGColor]) {
-
- if self.colors?.count == 2 {
- self.gradientLayer?.colors = colors
- }else{
- let firstColor = UIColor(red: 1, green: 0, blue: 0, alpha: 0.12).cgColor
- let secondColor = UIColor(red: 1, green: 0, blue: 0, alpha: 1).cgColor
- self.gradientLayer?.colors = [firstColor,secondColor]
- }
-
- // let endRadius = sqrt(pow(frame.width/2, 2) + pow(frame.height/2, 2))
- // let center = CGPoint(x: bounds.size.width / 2, y: bounds.size.height / 2)
- // let gradient = CGGradient(colorsSpace: nil, colors: colors as CFArray, locations: nil)
- // let context = UIGraphicsGetCurrentContext()
- // context?.drawRadialGradient(gradient!, startCenter: center, startRadius: 0.0, endCenter: center, endRadius: endRadius, options: CGGradientDrawingOptions.drawsBeforeStartLocation)
- }
- fileprivate func currentColor(_ color :UIColor ) {
- let coms = color.cgColor.components
- var r ,g,b : Int
- //考虑灰度情况
- if coms?.count == 2 {
- r = Int((coms?.first)! * CGFloat(255))
- g = Int((coms?.first)! * CGFloat(255))
- b = Int((coms?.first)! * CGFloat(255))
- }else{
- r = Int((coms?[0])! * CGFloat(255))
- g = Int((coms?[1])! * CGFloat(255))
- b = Int((coms?[2])! * CGFloat(255))
- }
- colorValueBtn.setTitle("R:\(r) G:\(g) B:\(b)", for: .normal)
- self.finalColor = ColorStruct(Red: r, Green: g, Blue: b)
- }
-
- fileprivate func getAlphaColor(_ color:UIColor) -> UIColor {
- let coms = color.cgColor.components
- var r ,g,b : CGFloat
- //考虑灰度情况
- if coms?.count == 2 {
- r = CGFloat((coms?.first)! * CGFloat(255))
- g = CGFloat((coms?.first)! * CGFloat(255))
- b = CGFloat((coms?.first)! * CGFloat(255))
- }else{
- r = CGFloat((coms?[0])! * CGFloat(255))
- g = CGFloat((coms?[1])! * CGFloat(255))
- b = CGFloat((coms?[2])! * CGFloat(255))
- }
-
- return UIColor(red: r, green: g, blue: b, alpha: 0.12)
- }
- fileprivate func reset() {//开始移动 - 判断是横滑还是竖滑
- isLock = false // 解锁
- self.isHorizontalMove = false
- self.isVerticalMove = false
- self.colorPickerView.isHidden = true
- self.brightnessPickerView.isHidden = true
- self.touchView.isHidden = true
- self.lampInfoBox.isHidden = true
- self.brightThumb.isHidden = true
- self.colorThumb.isHidden = true
- Intermediate.isRegulateColor = "1"
- if isMove == true{
- // 255 0 249
- if let finalColor = self.finalColor {
- if let block = self.paletteComplition {
- block(finalColor)
- }
- }
- isMove = false
- }
- }
-
- //填充颜色
- fileprivate func _fill(_ aColor :UIColor){
- // log.debug("color - \(color)")
- var r : Float = 0
- var g : Float = 0
- var b : Float = 0
- var a : Float = 0
- var h : Float = 0
- var s : Float = 0
- var v : Float = 0
- let comp = aColor.cgColor.components
- r = Float(comp![0])
- g = Float(comp![1])
- b = Float(comp![2])
- a = Float(comp![3])
- RGBToHSV(r, g, b, &h, &s, &v, true) //调用c方法 自动转换
- self.hvalue = CGFloat(h)
- self.color = colorPickerWidth * (self.hvalue ?? 0) + 40
- let bri = CGFloat(v)
- let centerY = endY! - 400 * bri
- self.brightThumb.center.y = centerY
- self.brightnessBtn.setTitle("\(Int(bri * 100))%", for: .normal)
- self.bright = centerY
- setColorBrightness(bri)
- }
- }
|