123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- //
- // UIColor+adjust.swift
- // Nextcloud
- //
- // Created by Marino Faggiana on 04/02/2020.
- // Copyright © 2020 Marino Faggiana. All rights reserved.
- //
- import Foundation
- extension UIColor {
- @objc func lighter(by percentage: CGFloat = 30.0) -> UIColor? {
- return self.adjust(by: abs(percentage) )
- }
- @objc func darker(by percentage: CGFloat = 30.0) -> UIColor? {
- return self.adjust(by: -1 * abs(percentage) )
- }
- func adjust(by percentage: CGFloat = 30.0) -> UIColor? {
- var red: CGFloat = 0, green: CGFloat = 0, blue: CGFloat = 0, alpha: CGFloat = 0
- if self.getRed(&red, green: &green, blue: &blue, alpha: &alpha) {
- return UIColor(red: min(red + percentage/100, 1.0),
- green: min(green + percentage/100, 1.0),
- blue: min(blue + percentage/100, 1.0),
- alpha: alpha)
- } else {
- return nil
- }
- }
-
- @objc func isTooLight() -> Bool {
- guard let components = cgColor.components, components.count > 2 else {return false}
- let brightness = ((components[0] * 299) + (components[1] * 587) + (components[2] * 114)) / 1000
- return (brightness > 0.95)
- }
-
- @objc func isTooDark() -> Bool {
- guard let components = cgColor.components, components.count > 2 else {return false}
- let brightness = ((components[0] * 299) + (components[1] * 587) + (components[2] * 114)) / 1000
- return (brightness < 0.05)
- }
-
- func isLight(threshold: Float = 0.7) -> Bool {
- let originalCGColor = self.cgColor
- // Now we need to convert it to the RGB colorspace. UIColor.white / UIColor.black are greyscale and not RGB.
- // If you don't do this then you will crash when accessing components index 2 below when evaluating greyscale colors.
- let RGBCGColor = originalCGColor.converted(to: CGColorSpaceCreateDeviceRGB(), intent: .defaultIntent, options: nil)
- guard let components = RGBCGColor?.components else { return false }
- guard components.count >= 3 else { return false }
- let brightness = Float(((components[0] * 299) + (components[1] * 587) + (components[2] * 114)) / 1000)
- return (brightness > threshold)
- }
- }
|