UIColor(QMUI)

@interface UIColor (QMUI)

/**
 *  使用HEX命名方式的颜色字符串生成一个UIColor对象
 *
 *  @param hexString 支持以 # 开头和不以 # 开头的 hex 字符串
 *      #RGB        例如#f0f,等同于#ffff00ff,RGBA(255, 0, 255, 1)
 *      #ARGB       例如#0f0f,等同于#00ff00ff,RGBA(255, 0, 255, 0)
 *      #RRGGBB     例如#ff00ff,等同于#ffff00ff,RGBA(255, 0, 255, 1)
 *      #AARRGGBB   例如#00ff00ff,等同于RGBA(255, 0, 255, 0)
 *
 * @return UIColor对象
 */
+ (nullable UIColor *)qmui_colorWithHexString:(nullable NSString *)hexString;

/**
 *  将当前色值转换为hex字符串,通道排序是AARRGGBB(与Android保持一致)
 *  @return 色值对应的 hex 字符串,以 # 开头,例如 #00ff00ff
 */
- (NSString *)qmui_hexString;

/**
 *  获取当前 UIColor 对象里的红色色值
 *
 *  @return 红色通道的色值,值范围为0.0-1.0
 */
- (CGFloat)qmui_red;

/**
 *  获取当前 UIColor 对象里的绿色色值
 *
 *  @return 绿色通道的色值,值范围为0.0-1.0
 */
- (CGFloat)qmui_green;

/**
 *  获取当前 UIColor 对象里的蓝色色值
 *
 *  @return 蓝色通道的色值,值范围为0.0-1.0
 */
- (CGFloat)qmui_blue;

/**
 *  获取当前 UIColor 对象里的透明色值
 *
 *  @return 透明通道的色值,值范围为0.0-1.0
 */
- (CGFloat)qmui_alpha;

/**
 *  获取当前 UIColor 对象里的 hue(色相),注意 hue 的值是一个角度,所以0和1(0°和360°)是等价的,用 return 值去做判断时要特别注意。
 */
- (CGFloat)qmui_hue;

/**
 *  获取当前 UIColor 对象里的 saturation(饱和度)
 */
- (CGFloat)qmui_saturation;

/**
 *  获取当前 UIColor 对象里的 brightness(亮度)
 */
- (CGFloat)qmui_brightness;

/**
 *  将当前UIColor对象剥离掉alpha通道后得到的色值。相当于把当前颜色的半透明值强制设为1.0后返回
 *
 *  @return alpha通道为1.0,其他rgb通道与原UIColor对象一致的新UIColor对象
 */
- (nullable UIColor *)qmui_colorWithoutAlpha;

/**
 *  计算当前color叠加了alpha之后放在指定颜色的背景上的色值
 */
- (UIColor *)qmui_colorWithAlpha:(CGFloat)alpha backgroundColor:(nullable UIColor *)backgroundColor;

/**
 *  计算当前color叠加了alpha之后放在白色背景上的色值
 */
- (UIColor *)qmui_colorWithAlphaAddedToWhite:(CGFloat)alpha;

/**
 *  将自身变化到某个目标颜色,可通过参数progress控制变化的程度,最终得到一个纯色
 *  @param toColor 目标颜色
 *  @param progress 变化程度,取值范围0.0f~1.0f
 */
- (UIColor *)qmui_transitionToColor:(nullable UIColor *)toColor progress:(CGFloat)progress;

/**
 *  判断当前颜色是否为深色,可用于根据不同色调动态设置不同文字颜色的场景。
 *
 *  @link http://stackoverflow.com/questions/19456288/text-color-based-on-background-image @/link
 *
 *  @return 若为深色则返回“YES”,浅色则返回“NO”
 */
- (BOOL)qmui_colorIsDark;

/**
 *  @return 当前颜色的反色,不管传入的颜色属于什么 colorSpace,最终返回的反色都是 RGB
 *
 *  @link http://stackoverflow.com/questions/5893261/how-to-get-inverse-color-from-uicolor @/link
 */
- (UIColor *)qmui_inverseColor;

/**
 *  判断当前颜色是否等于系统默认的 tintColor 颜色。
 *  背景:如果将一个 UIView.tintColor 设置为 nil,表示这个 view 的 tintColor 希望跟随 superview.tintColor 变化而变化,所以设置完再获取 view.tintColor,得到的并非 nil,而是 superview.tintColor 的值,而如果整棵 view 层级树里的 view 都没有设置自己的 tintColor,则会返回系统默认的 tintColor(也即 [UIColor qmui_systemTintColor]),所以才提供这个方法用于代替判断 tintColor == nil 的作用。
 */
- (BOOL)qmui_isSystemTintColor;

/**
 *  获取当前系统的默认 tintColor 色值
 */
+ (UIColor *)qmui_systemTintColor;

/**
 *  计算两个颜色叠加之后的最终色(注意区分前景色后景色的顺序)<br/>
 *  @link http://stackoverflow.com/questions/10781953/determine-rgba-colour-received-by-combining-two-colours @/link
 */
+ (UIColor *)qmui_colorWithBackendColor:(UIColor *)backendColor frontColor:(UIColor *)frontColor;

/**
 *  将颜色A变化到颜色B,可通过progress控制变化的程度
 *  @param fromColor 起始颜色
 *  @param toColor 目标颜色
 *  @param progress 变化程度,取值范围0.0f~1.0f
 */
+ (UIColor *)qmui_colorFromColor:(UIColor *)fromColor toColor:(UIColor *)toColor progress:(CGFloat)progress;

/**
 *  产生一个随机色,大部分情况下用于测试
 */
+ (UIColor *)qmui_randomColor;

@end

Undocumented

  • 使用HEX命名方式的颜色字符串生成一个UIColor对象

    Declaration

    Objective-C

    + (nullable UIColor *)qmui_colorWithHexString:(nullable NSString *)hexString;

    Swift

    class func qmui_color(withHexString hexString: String?) -> UIColor?

    Parameters

    hexString

    支持以 # 开头和不以 # 开头的 hex 字符串 #RGB 例如#f0f,等同于#ffff00ff,RGBA(255, 0, 255, 1) #ARGB 例如#0f0f,等同于#00ff00ff,RGBA(255, 0, 255, 0) #RRGGBB 例如#ff00ff,等同于#ffff00ff,RGBA(255, 0, 255, 1) #AARRGGBB 例如#00ff00ff,等同于RGBA(255, 0, 255, 0)

    Return Value

    UIColor对象

  • 将当前色值转换为hex字符串,通道排序是AARRGGBB(与Android保持一致)

    Declaration

    Objective-C

    - (nonnull NSString *)qmui_hexString;

    Swift

    func qmui_hexString() -> String

    Return Value

    色值对应的 hex 字符串,以 # 开头,例如 #00ff00ff

  • 获取当前 UIColor 对象里的红色色值

    Declaration

    Objective-C

    - (CGFloat)qmui_red;

    Swift

    func qmui_red() -> CGFloat

    Return Value

    红色通道的色值,值范围为0.0-1.0

  • 获取当前 UIColor 对象里的绿色色值

    Declaration

    Objective-C

    - (CGFloat)qmui_green;

    Swift

    func qmui_green() -> CGFloat

    Return Value

    绿色通道的色值,值范围为0.0-1.0

  • 获取当前 UIColor 对象里的蓝色色值

    Declaration

    Objective-C

    - (CGFloat)qmui_blue;

    Swift

    func qmui_blue() -> CGFloat

    Return Value

    蓝色通道的色值,值范围为0.0-1.0

  • 获取当前 UIColor 对象里的透明色值

    Declaration

    Objective-C

    - (CGFloat)qmui_alpha;

    Swift

    func qmui_alpha() -> CGFloat

    Return Value

    透明通道的色值,值范围为0.0-1.0

  • 获取当前 UIColor 对象里的 hue(色相),注意 hue 的值是一个角度,所以0和1(0°和360°)是等价的,用 return 值去做判断时要特别注意。

    Declaration

    Objective-C

    - (CGFloat)qmui_hue;

    Swift

    func qmui_hue() -> CGFloat
  • 获取当前 UIColor 对象里的 saturation(饱和度)

    Declaration

    Objective-C

    - (CGFloat)qmui_saturation;

    Swift

    func qmui_saturation() -> CGFloat
  • 获取当前 UIColor 对象里的 brightness(亮度)

    Declaration

    Objective-C

    - (CGFloat)qmui_brightness;

    Swift

    func qmui_brightness() -> CGFloat
  • 将当前UIColor对象剥离掉alpha通道后得到的色值。相当于把当前颜色的半透明值强制设为1.0后返回

    Declaration

    Objective-C

    - (nullable UIColor *)qmui_colorWithoutAlpha;

    Swift

    func qmui_colorWithoutAlpha() -> UIColor?

    Return Value

    alpha通道为1.0,其他rgb通道与原UIColor对象一致的新UIColor对象

  • 计算当前color叠加了alpha之后放在指定颜色的背景上的色值

    Declaration

    Objective-C

    - (nonnull UIColor *)qmui_colorWithAlpha:(CGFloat)alpha
                             backgroundColor:(nullable UIColor *)backgroundColor;

    Swift

    func qmui_color(withAlpha alpha: CGFloat, backgroundColor: UIColor?) -> UIColor
  • 计算当前color叠加了alpha之后放在白色背景上的色值

    Declaration

    Objective-C

    - (nonnull UIColor *)qmui_colorWithAlphaAddedToWhite:(CGFloat)alpha;

    Swift

    func qmui_colorWithAlphaAdded(toWhite alpha: CGFloat) -> UIColor
  • 将自身变化到某个目标颜色,可通过参数progress控制变化的程度,最终得到一个纯色

    Declaration

    Objective-C

    - (nonnull UIColor *)qmui_transitionToColor:(nullable UIColor *)toColor
                                       progress:(CGFloat)progress;

    Swift

    func qmui_transition(to toColor: UIColor?, progress: CGFloat) -> UIColor

    Parameters

    toColor

    目标颜色

    progress

    变化程度,取值范围0.0f~1.0f

  • 判断当前颜色是否为深色,可用于根据不同色调动态设置不同文字颜色的场景。

    @link http://stackoverflow.com/questions/19456288/text-color-based-on-background-image @/link

    Declaration

    Objective-C

    - (BOOL)qmui_colorIsDark;

    Swift

    func qmui_colorIsDark() -> Bool

    Return Value

    若为深色则返回“YES”,浅色则返回“NO”

  • Declaration

    Objective-C

    - (nonnull UIColor *)qmui_inverseColor;

    Swift

    func qmui_inverse() -> UIColor

    Return Value

    当前颜色的反色,不管传入的颜色属于什么 colorSpace,最终返回的反色都是 RGB

  • 判断当前颜色是否等于系统默认的 tintColor 颜色。 背景:如果将一个 UIView.tintColor 设置为 nil,表示这个 view 的 tintColor 希望跟随 superview.tintColor 变化而变化,所以设置完再获取 view.tintColor,得到的并非 nil,而是 superview.tintColor 的值,而如果整棵 view 层级树里的 view 都没有设置自己的 tintColor,则会返回系统默认的 tintColor(也即 [UIColor qmui_systemTintColor]),所以才提供这个方法用于代替判断 tintColor == nil 的作用。

    Declaration

    Objective-C

    - (BOOL)qmui_isSystemTintColor;

    Swift

    func qmui_isSystemTintColor() -> Bool
  • 获取当前系统的默认 tintColor 色值

    Declaration

    Objective-C

    + (nonnull UIColor *)qmui_systemTintColor;

    Swift

    class func qmui_systemTint() -> UIColor
  • 计算两个颜色叠加之后的最终色(注意区分前景色后景色的顺序)
    @link http://stackoverflow.com/questions/10781953/determine-rgba-colour-received-by-combining-two-colours @/link

    Declaration

    Objective-C

    + (nonnull UIColor *)qmui_colorWithBackendColor:(nonnull UIColor *)backendColor
                                         frontColor:(nonnull UIColor *)frontColor;

    Swift

    class func qmui_color(withBackendColor backendColor: UIColor, frontColor: UIColor) -> UIColor
  • 将颜色A变化到颜色B,可通过progress控制变化的程度

    Declaration

    Objective-C

    + (nonnull UIColor *)qmui_colorFromColor:(nonnull UIColor *)fromColor
                                     toColor:(nonnull UIColor *)toColor
                                    progress:(CGFloat)progress;

    Swift

    class func qmui_color(from fromColor: UIColor, to toColor: UIColor, progress: CGFloat) -> UIColor

    Parameters

    fromColor

    起始颜色

    toColor

    目标颜色

    progress

    变化程度,取值范围0.0f~1.0f

  • 产生一个随机色,大部分情况下用于测试

    Declaration

    Objective-C

    + (nonnull UIColor *)qmui_randomColor;

    Swift

    class func qmui_random() -> UIColor