#import <UIKit/UIKit.h>
@interface UIColor (Modify)
/**
* @brief 反转颜色
*
* @return 反转处理后的颜色
*/
- (UIColor *)inverted;
/**
* @brief 半透明颜色
*
* @return 半透明处理后的颜色
*/
- (UIColor *)translucence;
/**
* @brief 使明亮颜色
*
* @return 使明亮处理后的颜色
*/
- (UIColor *)lighten:(CGFloat)lighten;
/**
* @brief 使变暗颜色
*
* @return 使变暗处理后的颜色
*/
- (UIColor *)darken:(CGFloat)darken;
@end
#import "UIColor+Modify.h"
@implementation UIColor (Modify)
/**
* @brief 反转颜色
*
* @return 反转处理后的颜色
*/
- (UIColor *)inverted {
NSArray *components = [self component_array];
return [UIColor colorWithRed:1-[components[0] doubleValue] green:1-[components[1] doubleValue] blue:1-[components[2] doubleValue] alpha:[components[3] doubleValue]];
}
/**
* @brief 半透明颜色
*
* @return 半透明处理后的颜色
*/
- (UIColor *)translucence {
CGFloat hue = 0, saturation = 0, brightness = 0, alpha = 0;
[self getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];
return [UIColor colorWithHue:hue saturation:saturation*1.158 brightness:brightness*0.95 alpha:alpha];
}
/**
* @brief 使明亮颜色
*
* @return 使明亮处理后的颜色
*/
- (UIColor *)lighten:(CGFloat)lighten {
CGFloat hue = 0, saturation = 0, brightness = 0, alpha = 0;
[self getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];
return [UIColor colorWithHue:hue saturation:saturation*(1-lighten) brightness:brightness*(1+lighten) alpha:alpha];
}
/**
* @brief 使变暗颜色
*
* @return 使变暗处理后的颜色
*/
- (UIColor *)darken:(CGFloat)darken {
CGFloat hue = 0, saturation = 0, brightness = 0, alpha = 0;
[self getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];
return [UIColor colorWithHue:hue saturation:saturation*(1+darken) brightness:brightness*(1-darken) alpha:alpha];
}
/**
* @brief 颜色组合
*
* @return 颜色组合
*/
- (NSArray *)component_array {
CGFloat red, green, blue, alpha;
const CGFloat *components = CGColorGetComponents([self CGColor]);
if (CGColorGetNumberOfComponents([self CGColor]) == 2) {
red = components[0];
green = components[0];
blue = components[0];
alpha = components[1];
}
else {
red = components[0];
green = components[1];
blue = components[2];
alpha = components[3];
}
return @[@(red), @(green), @(blue), @(alpha)];
}
@end