Get Slightly Lighter and Darker Color from UIColor

前端 未结 19 2706
猫巷女王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条回答
  •  孤城傲影
    2020-12-07 07:41

    I render coloured cells based on a status value:

    status-images

    For this I wrote a swift extension based on some old objc code after I got an error using CryingHippo's suggestion:

    extension UIColor{
    
        func darker(darker: CGFloat) -> UIColor{
    
            var red: CGFloat = 0.0
            var green: CGFloat = 0.0
            var blue: CGFloat = 0.0
    
            if self.colorSpace == UIColorSpace.genericGrayColorSpace(){
    
                red =  whiteComponent - darker
                green = whiteComponent - darker
                blue  = whiteComponent - darker
            } else {
                red = redComponent - darker
                green = greenComponent - darker
                blue = blueComponent - darker
            }
    
            if red < 0{
                green += red/2
                blue += red/2
            }
    
            if green < 0{
                red += green/2
                blue += green/2
            }
    
            if blue < 0{
                green += blue/2
                red += blue/2
            }
    
            return UIColor(
                calibratedRed: red,
                green: green,
                blue: blue,
                alpha: alphaComponent
            )
        }
    
        func lighter(lighter: CGFloat) -> UIColor{
            return darker(-lighter)
        }
    }
    

    The same works for NSColor as well. Simply replace UIColor with NSColor.

提交回复
热议问题