IHColorAdjustmentView.swift 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. //
  2. // IHColorAdjustmentView.swift
  3. // Inhealth
  4. //
  5. // Created by weclouds on 2019/12/14.
  6. // Copyright © 2019 weclouds. All rights reserved.
  7. //
  8. import UIKit
  9. struct ColorStruct {
  10. var Red : Int? = 0
  11. var Green : Int? = 0
  12. var Blue : Int? = 0
  13. }
  14. protocol IHColorAdjustmentViewDelegate : NSObjectProtocol{
  15. func colorAdjustmentViewChangedColor(red:Int,green : Int,blue: Int)
  16. }
  17. class IHColorAdjustmentView: UIView {
  18. weak var delegate: IHColorAdjustmentViewDelegate?
  19. var colorStruct :ColorStruct?{
  20. didSet{
  21. if var color = self.colorStruct {
  22. if color.Red! > 255 {
  23. color.Red = 255
  24. }
  25. if color.Green! > 255 {
  26. color.Green = 255
  27. }
  28. if color.Blue! > 255 {
  29. color.Blue = 255
  30. }
  31. self.rLabel.text = "\(color.Red!)"
  32. self.gLabel.text = "\(color.Green!)"
  33. self.bLabel.text = "\(color.Blue!)"
  34. let red = CGFloat(color.Red!) / 255
  35. let green = CGFloat(color.Green!) / 255
  36. let blue = CGFloat(color.Blue!) / 255
  37. self.curColor = UIColor(red: red, green: green, blue: blue, alpha: 1)
  38. preColor = self.curColor
  39. _fill(preColor!)
  40. isTouchColorSquare = false
  41. isTouchColorBarPicker = false
  42. }
  43. }
  44. }
  45. var isTouchColorSquare = false
  46. var isTouchColorBarPicker = false
  47. //默认红色
  48. fileprivate let default_color = UIColor.red
  49. var colorPickerBlock:((CGFloat,CGFloat,CGFloat)->Void)?
  50. @IBOutlet weak var ColorSquareView: DivoomColorSquareView! //色块
  51. @IBOutlet weak var ColorBarPickerView: DivoomColorBarPickerView! //滑动条
  52. @IBOutlet weak var rLabel: UILabel!
  53. @IBOutlet weak var gLabel: UILabel!
  54. @IBOutlet weak var bLabel: UILabel!
  55. /// 上一次的颜色 //默认红色
  56. var preColor : UIColor? = .red
  57. ///当前颜色
  58. var curColor : UIColor? = .red
  59. ///屏幕比例
  60. private var _scaling :CGFloat?
  61. override func awakeFromNib() {
  62. super.awakeFromNib()
  63. log.debug("IHColorAdjustmentView -- awakeFromNib")
  64. setupView()
  65. }
  66. func setupView() {
  67. _scaling = UIScreen.main.bounds.size.width / 375
  68. //默认红色
  69. eventConfig()
  70. }
  71. ///配置事件
  72. private func eventConfig() {
  73. // log.debug("eventConfig配置事件")
  74. // barpickView回调
  75. self.ColorBarPickerView.valueChangedBlock = { (hvalue) in
  76. self.ColorSquareView.hvalue = hvalue
  77. // log.debug("hvalue - \(hvalue) ")
  78. }
  79. self.ColorBarPickerView.touchEnddBlock = {
  80. // log.debug("点击了滑动条")
  81. self.isTouchColorSquare = false
  82. self.isTouchColorBarPicker = true
  83. }
  84. //suiareView回调
  85. self.ColorSquareView.colorChangedBlock = { (color) in
  86. self.curColor = color //当前颜色
  87. let coms = color.cgColor.components
  88. var r ,g,b : Int
  89. //考虑灰度情况
  90. if coms?.count == 2 {
  91. r = Int((coms?.first)! * CGFloat(255))
  92. g = Int((coms?.first)! * CGFloat(255))
  93. b = Int((coms?.first)! * CGFloat(255))
  94. }else{
  95. r = Int((coms?[0])! * CGFloat(255))
  96. g = Int((coms?[1])! * CGFloat(255))
  97. b = Int((coms?[2])! * CGFloat(255))
  98. }
  99. self.rLabel.text = "\(r)"
  100. self.gLabel.text = "\(g)"
  101. self.bLabel.text = "\(b)"
  102. //log.debug("色块 r - \(r) - g - \(g) - b - \(b) ")
  103. // log.debug("isTouchColorSquare - \(self.isTouchColorSquare) --- isTouchColorBarPicker - \(self.isTouchColorBarPicker) ")
  104. if self.isTouchColorSquare == true || self.isTouchColorBarPicker == true {
  105. if let delegate = self.delegate {
  106. delegate.colorAdjustmentViewChangedColor(red: r, green: g , blue: b)
  107. }
  108. }
  109. }
  110. //触摸
  111. self.ColorSquareView.touchColorEndBlock = {
  112. //log.debug("点击了色块")
  113. self.isTouchColorSquare = true
  114. self.isTouchColorBarPicker = false
  115. }
  116. }
  117. //填充颜色
  118. private func _fill(_ color :UIColor){
  119. var r : Float = 0
  120. var g : Float = 0
  121. var b : Float = 0
  122. var a : Float = 0
  123. var h : Float = 0
  124. var s : Float = 0
  125. var v : Float = 0
  126. let comp = color.cgColor.components
  127. r = Float(comp![0])
  128. g = Float(comp![1])
  129. b = Float(comp![2])
  130. a = Float(comp![3])
  131. RGBToHSV(r, g, b, &h, &s, &v, true) //调用c方法 自动转换
  132. ColorBarPickerView.hvalue = CGFloat(h)
  133. ColorSquareView.hvalue = CGFloat(h)
  134. ColorSquareView.svvalue = CGPoint(x: CGFloat(s), y: CGFloat(v))
  135. // var h: CGFloat = 0
  136. // var s: CGFloat = 0
  137. // var b: CGFloat = 0
  138. // var a: CGFloat = 0
  139. // color.getHue(&h, saturation: &s, brightness: &b, alpha: &a)
  140. }
  141. func getMutablePointer<T>(ptr: UnsafeMutablePointer<T>) -> UnsafeMutablePointer<T> {
  142. return ptr
  143. }
  144. }