From fd67e39711aeff1fb10b4d0876872c3311e8b190 Mon Sep 17 00:00:00 2001 From: Johan Kasperi Date: Sun, 18 Dec 2016 23:03:18 +0100 Subject: [PATCH 01/10] Release 1.1.1 --- #SwiftHSVColorPicker.podspec# | 14 ++++++++++++++ SwiftHSVColorPicker.podspec | 2 +- SwiftHSVColorPicker.podspec~ | 14 ++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 #SwiftHSVColorPicker.podspec# create mode 100644 SwiftHSVColorPicker.podspec~ diff --git a/#SwiftHSVColorPicker.podspec# b/#SwiftHSVColorPicker.podspec# new file mode 100644 index 0000000..a46288a --- /dev/null +++ b/#SwiftHSVColorPicker.podspec# @@ -0,0 +1,14 @@ +Pod::Spec.new do |s| + s.name = 'SwiftHSVColorPicker' + s.version = '1.1.0' + s.summary = 'Swift HSV Color Picker' + s.description = 'A HSV Color Picker for iOS including a color wheel, brightness slider and a view for the selected color.' + s.homepage = 'https://github.com/johankasperi/SwiftHSVColorPicker' + s.license = 'MIT' + s.author = { 'Johan Kasperi' => 'johan@kasperi.se' } + s.social_media_url = 'https://twitter.com/johankasperi' + s.platform = :ios, '8.0' + s.source = { :git => 'https://github.com/johankasperi/SwiftHSVColorPicker.git', :tag => s.version.to_s } + s.source_files = 'Classes', 'Source/**/*.{swift}' + s.requires_arc = true +end diff --git a/SwiftHSVColorPicker.podspec b/SwiftHSVColorPicker.podspec index a46288a..0919d42 100644 --- a/SwiftHSVColorPicker.podspec +++ b/SwiftHSVColorPicker.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'SwiftHSVColorPicker' - s.version = '1.1.0' + s.version = '1.1.1' s.summary = 'Swift HSV Color Picker' s.description = 'A HSV Color Picker for iOS including a color wheel, brightness slider and a view for the selected color.' s.homepage = 'https://github.com/johankasperi/SwiftHSVColorPicker' diff --git a/SwiftHSVColorPicker.podspec~ b/SwiftHSVColorPicker.podspec~ new file mode 100644 index 0000000..a46288a --- /dev/null +++ b/SwiftHSVColorPicker.podspec~ @@ -0,0 +1,14 @@ +Pod::Spec.new do |s| + s.name = 'SwiftHSVColorPicker' + s.version = '1.1.0' + s.summary = 'Swift HSV Color Picker' + s.description = 'A HSV Color Picker for iOS including a color wheel, brightness slider and a view for the selected color.' + s.homepage = 'https://github.com/johankasperi/SwiftHSVColorPicker' + s.license = 'MIT' + s.author = { 'Johan Kasperi' => 'johan@kasperi.se' } + s.social_media_url = 'https://twitter.com/johankasperi' + s.platform = :ios, '8.0' + s.source = { :git => 'https://github.com/johankasperi/SwiftHSVColorPicker.git', :tag => s.version.to_s } + s.source_files = 'Classes', 'Source/**/*.{swift}' + s.requires_arc = true +end From cb4aa667e9a18504dd68062f0a2bb93e6980ad82 Mon Sep 17 00:00:00 2001 From: andrei-sadagurschi Date: Tue, 13 Jun 2017 16:26:23 +0300 Subject: [PATCH 02/10] Create README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a699163..d42fb0c 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +[![No Maintenance Intended](http://unmaintained.tech/badge.svg)](http://unmaintained.tech/) + # SwiftHSVColorPicker ## Description @@ -36,4 +38,4 @@ SwiftHSVColorPicker is available under the MIT license. See the LICENSE file for ## Author Johan Kasperi
[@johankasperi](http://twitter.com/johankasperi)
-[kspri.se](http://kspri.se) \ No newline at end of file +[kspri.se](http://kspri.se) From 21e4733284e8a9dcb1e014dd9e1f840d1e93e2f9 Mon Sep 17 00:00:00 2001 From: Andrei-Iulian Sadagurschi Date: Tue, 13 Jun 2017 16:58:09 +0300 Subject: [PATCH 03/10] - added color picker delegate for getting notified when the color changes; --- Source/SwiftHSVColorPicker.swift | 12 ++++++++++++ SwiftHSVColorPickerExample/ViewController.swift | 7 +++++++ 2 files changed, 19 insertions(+) diff --git a/Source/SwiftHSVColorPicker.swift b/Source/SwiftHSVColorPicker.swift index f856e65..f1431a5 100755 --- a/Source/SwiftHSVColorPicker.swift +++ b/Source/SwiftHSVColorPicker.swift @@ -7,11 +7,17 @@ import UIKit +public protocol SwiftHSVColorPickerDelegate: class { + func colorPicker(_ picker: SwiftHSVColorPicker, didChangeColor color: UIColor) +} + open class SwiftHSVColorPicker: UIView, ColorWheelDelegate, BrightnessViewDelegate { var colorWheel: ColorWheel! var brightnessView: BrightnessView! var selectedColorView: SelectedColorView! + open weak var delegate: SwiftHSVColorPickerDelegate? + open var color: UIColor! var hue: CGFloat = 1.0 var saturation: CGFloat = 1.0 @@ -37,6 +43,8 @@ open class SwiftHSVColorPicker: UIView, ColorWheelDelegate, BrightnessViewDelega self.brightness = brightness self.color = color setup() + + delegate?.colorPicker(self, didChangeColor: self.color) } func setup() { @@ -79,6 +87,8 @@ open class SwiftHSVColorPicker: UIView, ColorWheelDelegate, BrightnessViewDelega self.color = UIColor(hue: self.hue, saturation: self.saturation, brightness: self.brightness, alpha: 1.0) brightnessView.setViewColor(self.color) selectedColorView.setViewColor(self.color) + + delegate?.colorPicker(self, didChangeColor: self.color) } func brightnessSelected(_ brightness: CGFloat) { @@ -86,5 +96,7 @@ open class SwiftHSVColorPicker: UIView, ColorWheelDelegate, BrightnessViewDelega self.color = UIColor(hue: self.hue, saturation: self.saturation, brightness: self.brightness, alpha: 1.0) colorWheel.setViewBrightness(brightness) selectedColorView.setViewColor(self.color) + + delegate?.colorPicker(self, didChangeColor: self.color) } } diff --git a/SwiftHSVColorPickerExample/ViewController.swift b/SwiftHSVColorPickerExample/ViewController.swift index 9e047f3..5c199f4 100644 --- a/SwiftHSVColorPickerExample/ViewController.swift +++ b/SwiftHSVColorPickerExample/ViewController.swift @@ -22,6 +22,7 @@ class ViewController: UIViewController { // Setup Color Picker colorPicker.setViewColor(selectedColor) + colorPicker.delegate = self } override func viewDidAppear(_ animated: Bool) { @@ -40,3 +41,9 @@ class ViewController: UIViewController { print(selectedColor!) } } + +extension ViewController: SwiftHSVColorPickerDelegate { + func colorPicker(_ picker: SwiftHSVColorPicker, didChangeColor color: UIColor) { + print("did change color: \(color)") + } +} From edf4e14730afc1146d6114061f9376bec0b66712 Mon Sep 17 00:00:00 2001 From: Andrei-Iulian Sadagurschi Date: Tue, 13 Jun 2017 17:20:06 +0300 Subject: [PATCH 04/10] - added conversion from extended RGB space to sRGB for iOS 10.0 and above; --- Source/ColorUtils.swift | 28 +++++++++++++++++++ .../ViewController.swift | 4 +-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/Source/ColorUtils.swift b/Source/ColorUtils.swift index e4c7a42..8e5f846 100644 --- a/Source/ColorUtils.swift +++ b/Source/ColorUtils.swift @@ -86,3 +86,31 @@ func rgb2hsv(_ rgb: RGB) -> HSV { hsb.alpha = rgb.alpha return hsb } + +public extension UIColor { + + var sRGBColor: UIColor { + if #available(iOS 10.0, *) { + // Only iOS 10.0 and above requires conversion from extended to sRGB. + var sRGBColor: CGColor? = nil + if let colorSpaceName = cgColor.colorSpace?.name { + let compareResult = CFStringCompare(colorSpaceName, CGColorSpace.extendedSRGB, CFStringCompareFlags(rawValue: 0)) + if compareResult == .compareEqualTo, let sRGBSpace = CGColorSpace(name: CGColorSpace.sRGB), + let sRGBConvertedColor = cgColor.converted(to: sRGBSpace, intent: .defaultIntent, options: nil) { + sRGBColor = sRGBConvertedColor + } else { + sRGBColor = cgColor + } + } + + if let sRGBColor = sRGBColor { + let color = UIColor(cgColor: sRGBColor) + return color + } + return self + } else { + // Fallback on earlier versions. + return self + } + } +} diff --git a/SwiftHSVColorPickerExample/ViewController.swift b/SwiftHSVColorPickerExample/ViewController.swift index 5c199f4..10b7b1a 100644 --- a/SwiftHSVColorPickerExample/ViewController.swift +++ b/SwiftHSVColorPickerExample/ViewController.swift @@ -21,8 +21,8 @@ class ViewController: UIViewController { // Do any additional setup after loading the view, typically from a nib. // Setup Color Picker - colorPicker.setViewColor(selectedColor) colorPicker.delegate = self + colorPicker.setViewColor(selectedColor) } override func viewDidAppear(_ animated: Bool) { @@ -44,6 +44,6 @@ class ViewController: UIViewController { extension ViewController: SwiftHSVColorPickerDelegate { func colorPicker(_ picker: SwiftHSVColorPicker, didChangeColor color: UIColor) { - print("did change color: \(color)") + print("did change color to: \(color), sRGB equivalent: \(color.sRGBColor)") } } From d81a126adaea5b762d955d199fe3e92a36e97f82 Mon Sep 17 00:00:00 2001 From: Andrei-Iulian Sadagurschi Date: Tue, 13 Jun 2017 17:20:23 +0300 Subject: [PATCH 05/10] - fixed compile warnings; --- Source/ColorWheel.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/ColorWheel.swift b/Source/ColorWheel.swift index c6cff6a..31a808d 100755 --- a/Source/ColorWheel.swift +++ b/Source/ColorWheel.swift @@ -202,7 +202,7 @@ class ColorWheel: UIView { if (d == 0) { hue = 0; } else { - hue = acos(dx/d) / CGFloat(M_PI) / 2.0 + hue = acos(dx/d) / CGFloat(Double.pi) / 2.0 if (dy < 0) { hue = 1.0 - hue } @@ -215,8 +215,8 @@ class ColorWheel: UIView { let dimension: CGFloat = min(wheelLayer.frame.width, wheelLayer.frame.height) let radius: CGFloat = saturation * dimension / 2 - let x = dimension / 2 + radius * cos(hue * CGFloat(M_PI) * 2) + 20; - let y = dimension / 2 + radius * sin(hue * CGFloat(M_PI) * 2) + 20; + let x = dimension / 2 + radius * cos(hue * CGFloat(Double.pi) * 2) + 20; + let y = dimension / 2 + radius * sin(hue * CGFloat(Double.pi) * 2) + 20; return CGPoint(x: x, y: y) } From a8146b42d280983952528b080b197ac891d44e22 Mon Sep 17 00:00:00 2001 From: Andrei-Iulian Sadagurschi Date: Tue, 13 Jun 2017 17:32:48 +0300 Subject: [PATCH 06/10] - convert from any color space to sRGB; --- Source/ColorUtils.swift | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Source/ColorUtils.swift b/Source/ColorUtils.swift index 8e5f846..6d46a9b 100644 --- a/Source/ColorUtils.swift +++ b/Source/ColorUtils.swift @@ -91,11 +91,12 @@ public extension UIColor { var sRGBColor: UIColor { if #available(iOS 10.0, *) { - // Only iOS 10.0 and above requires conversion from extended to sRGB. + // Only iOS 10.0 and above requires conversion from other color space to sRGB. + // On earlier versions of iOS, the specified values of red, green and blue are always between 0.0 and 1.0. var sRGBColor: CGColor? = nil if let colorSpaceName = cgColor.colorSpace?.name { - let compareResult = CFStringCompare(colorSpaceName, CGColorSpace.extendedSRGB, CFStringCompareFlags(rawValue: 0)) - if compareResult == .compareEqualTo, let sRGBSpace = CGColorSpace(name: CGColorSpace.sRGB), + let compareResult = CFStringCompare(colorSpaceName, CGColorSpace.sRGB, CFStringCompareFlags(rawValue: 0)) + if compareResult != .compareEqualTo, let sRGBSpace = CGColorSpace(name: CGColorSpace.sRGB), let sRGBConvertedColor = cgColor.converted(to: sRGBSpace, intent: .defaultIntent, options: nil) { sRGBColor = sRGBConvertedColor } else { From c19755b125e362ce1f1a16e6a731ff943219c860 Mon Sep 17 00:00:00 2001 From: Andrei-Iulian Sadagurschi Date: Tue, 13 Jun 2017 17:36:08 +0300 Subject: [PATCH 07/10] Release 1.1.2 --- #SwiftHSVColorPicker.podspec# | 14 -------------- SwiftHSVColorPicker.podspec | 2 +- SwiftHSVColorPicker.podspec~ | 14 -------------- 3 files changed, 1 insertion(+), 29 deletions(-) delete mode 100644 #SwiftHSVColorPicker.podspec# delete mode 100644 SwiftHSVColorPicker.podspec~ diff --git a/#SwiftHSVColorPicker.podspec# b/#SwiftHSVColorPicker.podspec# deleted file mode 100644 index a46288a..0000000 --- a/#SwiftHSVColorPicker.podspec# +++ /dev/null @@ -1,14 +0,0 @@ -Pod::Spec.new do |s| - s.name = 'SwiftHSVColorPicker' - s.version = '1.1.0' - s.summary = 'Swift HSV Color Picker' - s.description = 'A HSV Color Picker for iOS including a color wheel, brightness slider and a view for the selected color.' - s.homepage = 'https://github.com/johankasperi/SwiftHSVColorPicker' - s.license = 'MIT' - s.author = { 'Johan Kasperi' => 'johan@kasperi.se' } - s.social_media_url = 'https://twitter.com/johankasperi' - s.platform = :ios, '8.0' - s.source = { :git => 'https://github.com/johankasperi/SwiftHSVColorPicker.git', :tag => s.version.to_s } - s.source_files = 'Classes', 'Source/**/*.{swift}' - s.requires_arc = true -end diff --git a/SwiftHSVColorPicker.podspec b/SwiftHSVColorPicker.podspec index 0919d42..8dedc8c 100644 --- a/SwiftHSVColorPicker.podspec +++ b/SwiftHSVColorPicker.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'SwiftHSVColorPicker' - s.version = '1.1.1' + s.version = '1.1.2' s.summary = 'Swift HSV Color Picker' s.description = 'A HSV Color Picker for iOS including a color wheel, brightness slider and a view for the selected color.' s.homepage = 'https://github.com/johankasperi/SwiftHSVColorPicker' diff --git a/SwiftHSVColorPicker.podspec~ b/SwiftHSVColorPicker.podspec~ deleted file mode 100644 index a46288a..0000000 --- a/SwiftHSVColorPicker.podspec~ +++ /dev/null @@ -1,14 +0,0 @@ -Pod::Spec.new do |s| - s.name = 'SwiftHSVColorPicker' - s.version = '1.1.0' - s.summary = 'Swift HSV Color Picker' - s.description = 'A HSV Color Picker for iOS including a color wheel, brightness slider and a view for the selected color.' - s.homepage = 'https://github.com/johankasperi/SwiftHSVColorPicker' - s.license = 'MIT' - s.author = { 'Johan Kasperi' => 'johan@kasperi.se' } - s.social_media_url = 'https://twitter.com/johankasperi' - s.platform = :ios, '8.0' - s.source = { :git => 'https://github.com/johankasperi/SwiftHSVColorPicker.git', :tag => s.version.to_s } - s.source_files = 'Classes', 'Source/**/*.{swift}' - s.requires_arc = true -end From 52f35f1a3e3c53831ea8d797d197e424b0c6fed3 Mon Sep 17 00:00:00 2001 From: Andrei-Iulian Sadagurschi Date: Tue, 13 Jun 2017 19:27:06 +0300 Subject: [PATCH 08/10] - don't recreate color wheel, brightness view and selected color view each time the color is set from outside; - added laryer corner radius and border to selected color view; --- Source/SwiftHSVColorPicker.swift | 75 ++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 32 deletions(-) diff --git a/Source/SwiftHSVColorPicker.swift b/Source/SwiftHSVColorPicker.swift index f1431a5..d04dc30 100755 --- a/Source/SwiftHSVColorPicker.swift +++ b/Source/SwiftHSVColorPicker.swift @@ -42,43 +42,54 @@ open class SwiftHSVColorPicker: UIView, ColorWheelDelegate, BrightnessViewDelega self.saturation = saturation self.brightness = brightness self.color = color - setup() + setupIfNeeded() delegate?.colorPicker(self, didChangeColor: self.color) } - func setup() { - // Remove all subviews - let views = self.subviews - for view in views { - view.removeFromSuperview() + func setupIfNeeded() { + if colorWheel != nil && brightnessView != nil && selectedColorView != nil { + print("update") + colorWheel.setViewBrightness(brightness) + brightnessView.setViewColor(color) + selectedColorView.setViewColor(color) + } else { + print("setup") + // Remove all subviews + let views = self.subviews + for view in views { + view.removeFromSuperview() + } + + let selectedColorViewHeight: CGFloat = 44.0 + let brightnessViewHeight: CGFloat = 26.0 + + // let color wheel get the maximum size that is not overflow from the frame for both width and height + let colorWheelSize = min(self.bounds.width, self.bounds.height - selectedColorViewHeight - brightnessViewHeight) + + // let the all the subviews stay in the middle of universe horizontally + let centeredX = (self.bounds.width - colorWheelSize) / 2.0 + + // Init SelectedColorView subview + selectedColorView = SelectedColorView(frame: CGRect(x: centeredX, y:0, width: colorWheelSize, height: selectedColorViewHeight), color: self.color) + selectedColorView.layer.cornerRadius = 5.0 + selectedColorView.layer.borderWidth = 1.0 + selectedColorView.layer.borderColor = UIColor.darkGray.cgColor + // Add selectedColorView as a subview of this view + self.addSubview(selectedColorView) + + // Init new ColorWheel subview + colorWheel = ColorWheel(frame: CGRect(x: centeredX, y: selectedColorView.frame.maxY, width: colorWheelSize, height: colorWheelSize), color: self.color) + colorWheel.delegate = self + // Add colorWheel as a subview of this view + self.addSubview(colorWheel) + + // Init new BrightnessView subview + brightnessView = BrightnessView(frame: CGRect(x: centeredX, y: colorWheel.frame.maxY, width: colorWheelSize, height: brightnessViewHeight), color: self.color) + brightnessView.delegate = self + // Add brightnessView as a subview of this view + self.addSubview(brightnessView) } - - let selectedColorViewHeight: CGFloat = 44.0 - let brightnessViewHeight: CGFloat = 26.0 - - // let color wheel get the maximum size that is not overflow from the frame for both width and height - let colorWheelSize = min(self.bounds.width, self.bounds.height - selectedColorViewHeight - brightnessViewHeight) - - // let the all the subviews stay in the middle of universe horizontally - let centeredX = (self.bounds.width - colorWheelSize) / 2.0 - - // Init SelectedColorView subview - selectedColorView = SelectedColorView(frame: CGRect(x: centeredX, y:0, width: colorWheelSize, height: selectedColorViewHeight), color: self.color) - // Add selectedColorView as a subview of this view - self.addSubview(selectedColorView) - - // Init new ColorWheel subview - colorWheel = ColorWheel(frame: CGRect(x: centeredX, y: selectedColorView.frame.maxY, width: colorWheelSize, height: colorWheelSize), color: self.color) - colorWheel.delegate = self - // Add colorWheel as a subview of this view - self.addSubview(colorWheel) - - // Init new BrightnessView subview - brightnessView = BrightnessView(frame: CGRect(x: centeredX, y: colorWheel.frame.maxY, width: colorWheelSize, height: brightnessViewHeight), color: self.color) - brightnessView.delegate = self - // Add brightnessView as a subview of this view - self.addSubview(brightnessView) } func hueAndSaturationSelected(_ hue: CGFloat, saturation: CGFloat) { From e9065cda86f712f65f9d7d4c0f3c7c7587611bf4 Mon Sep 17 00:00:00 2001 From: Andrei-Iulian Sadagurschi Date: Tue, 13 Jun 2017 19:27:58 +0300 Subject: [PATCH 09/10] Release 1.1.3 --- SwiftHSVColorPicker.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SwiftHSVColorPicker.podspec b/SwiftHSVColorPicker.podspec index 8dedc8c..b4a2e8f 100644 --- a/SwiftHSVColorPicker.podspec +++ b/SwiftHSVColorPicker.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'SwiftHSVColorPicker' - s.version = '1.1.2' + s.version = '1.1.3' s.summary = 'Swift HSV Color Picker' s.description = 'A HSV Color Picker for iOS including a color wheel, brightness slider and a view for the selected color.' s.homepage = 'https://github.com/johankasperi/SwiftHSVColorPicker' From d9c9464eab768388fd9d9b7c406f4dc3b0b1a722 Mon Sep 17 00:00:00 2001 From: Andrei-Iulian Sadagurschi Date: Mon, 28 Aug 2017 11:12:04 +0300 Subject: [PATCH 10/10] - changes after code review; --- Source/ColorWheel.swift | 6 +++--- Source/SwiftHSVColorPicker.swift | 2 -- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Source/ColorWheel.swift b/Source/ColorWheel.swift index 31a808d..00766bf 100755 --- a/Source/ColorWheel.swift +++ b/Source/ColorWheel.swift @@ -202,7 +202,7 @@ class ColorWheel: UIView { if (d == 0) { hue = 0; } else { - hue = acos(dx/d) / CGFloat(Double.pi) / 2.0 + hue = acos(dx/d) / CGFloat.pi / 2.0 if (dy < 0) { hue = 1.0 - hue } @@ -215,8 +215,8 @@ class ColorWheel: UIView { let dimension: CGFloat = min(wheelLayer.frame.width, wheelLayer.frame.height) let radius: CGFloat = saturation * dimension / 2 - let x = dimension / 2 + radius * cos(hue * CGFloat(Double.pi) * 2) + 20; - let y = dimension / 2 + radius * sin(hue * CGFloat(Double.pi) * 2) + 20; + let x = dimension / 2 + radius * cos(hue * CGFloat.pi * 2) + 20; + let y = dimension / 2 + radius * sin(hue * CGFloat.pi * 2) + 20; return CGPoint(x: x, y: y) } diff --git a/Source/SwiftHSVColorPicker.swift b/Source/SwiftHSVColorPicker.swift index d04dc30..6a0ac28 100755 --- a/Source/SwiftHSVColorPicker.swift +++ b/Source/SwiftHSVColorPicker.swift @@ -49,12 +49,10 @@ open class SwiftHSVColorPicker: UIView, ColorWheelDelegate, BrightnessViewDelega func setupIfNeeded() { if colorWheel != nil && brightnessView != nil && selectedColorView != nil { - print("update") colorWheel.setViewBrightness(brightness) brightnessView.setViewColor(color) selectedColorView.setViewColor(color) } else { - print("setup") // Remove all subviews let views = self.subviews for view in views {