UIColor+adjust.swift 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. //
  2. // UIColor+adjust.swift
  3. // Nextcloud
  4. //
  5. // Created by Marino Faggiana on 04/02/2020.
  6. // Copyright © 2020 Marino Faggiana. All rights reserved.
  7. //
  8. import Foundation
  9. extension UIColor {
  10. @objc func lighter(by percentage: CGFloat = 30.0) -> UIColor? {
  11. return self.adjust(by: abs(percentage) )
  12. }
  13. @objc func darker(by percentage: CGFloat = 30.0) -> UIColor? {
  14. return self.adjust(by: -1 * abs(percentage) )
  15. }
  16. func adjust(by percentage: CGFloat = 30.0) -> UIColor? {
  17. var red: CGFloat = 0, green: CGFloat = 0, blue: CGFloat = 0, alpha: CGFloat = 0
  18. if self.getRed(&red, green: &green, blue: &blue, alpha: &alpha) {
  19. return UIColor(red: min(red + percentage/100, 1.0),
  20. green: min(green + percentage/100, 1.0),
  21. blue: min(blue + percentage/100, 1.0),
  22. alpha: alpha)
  23. } else {
  24. return nil
  25. }
  26. }
  27. @objc func isTooLight() -> Bool {
  28. var white: CGFloat = 0.0
  29. color.getWhite(&white, alpha: nil)
  30. if white == 1 { return true }
  31. guard let components = cgColor.components, components.count > 2 else {return false}
  32. let brightness = ((components[0] * 299) + (components[1] * 587) + (components[2] * 114)) / 1000
  33. return (brightness > 0.95)
  34. }
  35. @objc func isTooDark() -> Bool {
  36. var white: CGFloat = 0.0
  37. color.getWhite(&white, alpha: nil)
  38. if white == 0 { return true }
  39. guard let components = cgColor.components, components.count > 2 else {return false}
  40. let brightness = ((components[0] * 299) + (components[1] * 587) + (components[2] * 114)) / 1000
  41. return (brightness < 0.05)
  42. }
  43. func isLight(threshold: Float = 0.7) -> Bool {
  44. let originalCGColor = self.cgColor
  45. // Now we need to convert it to the RGB colorspace. UIColor.white / UIColor.black are greyscale and not RGB.
  46. // If you don't do this then you will crash when accessing components index 2 below when evaluating greyscale colors.
  47. let RGBCGColor = originalCGColor.converted(to: CGColorSpaceCreateDeviceRGB(), intent: .defaultIntent, options: nil)
  48. guard let components = RGBCGColor?.components else { return false }
  49. guard components.count >= 3 else { return false }
  50. let brightness = Float(((components[0] * 299) + (components[1] * 587) + (components[2] * 114)) / 1000)
  51. return (brightness > threshold)
  52. }
  53. }