Get Slightly Lighter and Darker Color from UIColor

前端 未结 19 2708
猫巷女王i
猫巷女王i 2020-12-07 07:08

I was looking to be able to turn any UIColor into a gradient. The way I am intending to do this is by using Core Graphics to draw a gradient. What I am trying to do is to ge

19条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-07 07:23

    Swift universal extension for iOS and OS X, using getHue :

    #if os(OSX)
    
        import Cocoa
        public  typealias PXColor = NSColor
    
        #else
    
        import UIKit
        public  typealias PXColor = UIColor
    
    #endif
    
        extension PXColor {
    
        func lighter(amount : CGFloat = 0.25) -> PXColor {
            return hueColorWithBrightnessAmount(1 + amount)
        }
    
        func darker(amount : CGFloat = 0.25) -> PXColor {
            return hueColorWithBrightnessAmount(1 - amount)
        }
    
        private func hueColorWithBrightnessAmount(amount: CGFloat) -> PXColor {
            var hue         : CGFloat = 0
            var saturation  : CGFloat = 0
            var brightness  : CGFloat = 0
            var alpha       : CGFloat = 0
    
            #if os(iOS)
    
                if getHue(&hue, saturation: &saturation, brightness: &brightness, alpha: &alpha) {
                    return PXColor( hue: hue,
                                    saturation: saturation,
                                    brightness: brightness * amount,
                                    alpha: alpha )
                } else {
                    return self
                }
    
                #else
    
                getHue(&hue, saturation: &saturation, brightness: &brightness, alpha: &alpha)
                return PXColor( hue: hue,
                                saturation: saturation,
                                brightness: brightness * amount,
                                alpha: alpha )
    
            #endif
    
        }
    
    }
    

    Usage :

    let color = UIColor(red: 0.5, green: 0.8, blue: 0.8, alpha: 1.0)
    color.lighter(amount:0.5)
    color.darker(amount:0.5)
    

    OR (with the default values):

    color.lighter()
    color.darker()
    

    Sample :

    enter image description here

提交回复
热议问题