十六进制颜色
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface UIColor (HexColor)
+ (UIColor *)wh_colorWithHexString:(NSString *)color alpha:(CGFloat)alpha;
@end
NS_ASSUME_NONNULL_END
#import "UIColor+HexColor.h"
@implementation UIColor (HexColor)
+ (UIColor *)wh_colorWithHexString:(NSString *)color alpha:(CGFloat)alpha
{
NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
if ([cString length] < 6)
{
return [UIColor clearColor];
}
if ([cString hasPrefix:@"0X"])
{
cString = [cString substringFromIndex:2];
}
if ([cString hasPrefix:@"#"])
{
cString = [cString substringFromIndex:1];
}
if ([cString length] != 6)
{
return [UIColor clearColor];
}
NSRange range;
range.location = 0;
range.length = 2;
//r
NSString *rString = [cString substringWithRange:range];
//g
range.location = 2;
NSString *gString = [cString substringWithRange:range];
//b
range.location = 4;
NSString *bString = [cString substringWithRange:range];
unsigned int r, g, b;
[[NSScanner scannerWithString:rString] scanHexInt:&r];
[[NSScanner scannerWithString:gString] scanHexInt:&g];
[[NSScanner scannerWithString:bString] scanHexInt:&b];
return [UIColor colorWithRed:((float)r / 255.0f) green:((float)g / 255.0f) blue:((float)b / 255.0f) alpha:alpha];
}
@end
//显示16进制颜色
+ (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha
{//删除字符串中的空格
NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
// String should be 6 or 8 characters
if ([cString length] < 6)
{
return [UIColor clearColor];
}
// strip 0X if it appears
//如果是0x开头的,那么截取字符串,字符串从索引为2的位置开始,一直到末尾
if ([cString hasPrefix:@"0X"])
{
cString = [cString substringFromIndex:2];
}
//如果是#开头的,那么截取字符串,字符串从索引为1的位置开始,一直到末尾
if ([cString hasPrefix:@"#"])
{cString = [cString substringFromIndex:1];
}
if ([cString length] != 6)
{
return [UIColor clearColor];
}
// Separate into r, g, b substrings
NSRange range;
range.location = 0;
range.length = 2;
//r
NSString *rString = [cString substringWithRange:range];
//g
range.location = 2;
NSString *gString = [cString substringWithRange:range];
//b
range.location = 4;
NSString *bString = [cString substringWithRange:range];
// Scan values
unsigned int r, g, b;
[[NSScanner scannerWithString:rString] scanHexInt:&r];
[[NSScanner scannerWithString:gString] scanHexInt:&g];
[[NSScanner scannerWithString:bString] scanHexInt:&b];
return [UIColor colorWithRed:((float)r / 255.0f) green:((float)g / 255.0f) blue:((float)b / 255.0f) alpha:alpha];
}
//默认alpha值为1
+ (UIColor *)colorWithHexString:(NSString *)color
{
return [self colorWithHexString:color alpha:1.0f];
}
=
==============显示渐变色==========
//16进制颜色、rgb颜色、渐变色
#import <UIKit/UIKit.h>
@interface UIColor (HEX)
+ (UIColor *)colorWithHex:(UInt32)hex;
+ (UIColor *)colorWithHex:(UInt32)hex andAlpha:(CGFloat)alpha;
+ (UIColor *)colorWithHexString:(NSString *)hexString;
- (NSString *)HEXString;
+ (UIColor *)colorWithWholeRed:(CGFloat)red
green:(CGFloat)green
blue:(CGFloat)blue
alpha:(CGFloat)alpha;
+ (UIColor *)colorWithWholeRed:(CGFloat)red
green:(CGFloat)green
blue:(CGFloat)blue;
/**
渐变色
*/
+ (UIColor*)gradientFromColor:(UIColor*)c1 toColor:(UIColor*)c2 withHeight:(int)height;
+ (UIColor*)gradientFromColor:(UIColor*)c1 toColor:(UIColor*)c2 withWidth:(int)Width;
+ (UIColor*)gradientFromColor:(UIColor*)c1 toColor:(UIColor*)c2 withPoint:(CGPoint)point;
@end
#import "UIColor+HEX.h"
CGFloat colorComponentFrom(NSString *string, NSUInteger start, NSUInteger length) {
NSString *substring = [string substringWithRange:NSMakeRange(start, length)];
NSString *fullHex = length == 2 ? substring : [NSString stringWithFormat: @"%@%@", substring, substring];
unsigned hexComponent;
[[NSScanner scannerWithString: fullHex] scanHexInt: &hexComponent];
return hexComponent / 255.0;
}
@implementation UIColor (HEX)
+ (UIColor *)colorWithHex:(UInt32)hex{
return [UIColor colorWithHex:hex andAlpha:1];
}
+ (UIColor *)colorWithHex:(UInt32)hex andAlpha:(CGFloat)alpha{
return [UIColor colorWithRed:((hex >> 16) & 0xFF)/255.0
green:((hex >> 8) & 0xFF)/255.0
blue:(hex & 0xFF)/255.0
alpha:alpha];
}
+ (UIColor *)colorWithHexString:(NSString *)hexString {
CGFloat alpha, red, blue, green;
NSString *colorString = [[hexString stringByReplacingOccurrencesOfString:@"#" withString:@""] uppercaseString];
switch ([colorString length]) {
case 3: // #RGB
alpha = 1.0f;
red = colorComponentFrom(colorString, 0, 1);
green = colorComponentFrom(colorString, 1, 1);
blue = colorComponentFrom(colorString, 2, 1);
break;
case 4: // #ARGB
alpha = colorComponentFrom(colorString, 0, 1);
red = colorComponentFrom(colorString, 1, 1);
green = colorComponentFrom(colorString, 2, 1);
blue = colorComponentFrom(colorString, 3, 1);
break;
case 6: // #RRGGBB
alpha = 1.0f;
red = colorComponentFrom(colorString, 0, 2);
green = colorComponentFrom(colorString, 2, 2);
blue = colorComponentFrom(colorString, 4, 2);
break;
case 8: // #AARRGGBB
alpha = colorComponentFrom(colorString, 0, 2);
red = colorComponentFrom(colorString, 2, 2);
green = colorComponentFrom(colorString, 4, 2);
blue = colorComponentFrom(colorString, 6, 2);
break;
default:
return nil;
}
return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
}
- (NSString *)HEXString{
UIColor* color = self;
if (CGColorGetNumberOfComponents(color.CGColor) < 4) {
const CGFloat *components = CGColorGetComponents(color.CGColor);
color = [UIColor colorWithRed:components[0]
green:components[0]
blue:components[0]
alpha:components[1]];
}
if (CGColorSpaceGetModel(CGColorGetColorSpace(color.CGColor)) != kCGColorSpaceModelRGB) {
return [NSString stringWithFormat:@"#FFFFFF"];
}
return [NSString stringWithFormat:@"#%02X%02X%02X", (int)((CGColorGetComponents(color.CGColor))[0]*255.0),
(int)((CGColorGetComponents(color.CGColor))[1]*255.0),
(int)((CGColorGetComponents(color.CGColor))[2]*255.0)];
}
+ (UIColor *)colorWithWholeRed:(CGFloat)red
green:(CGFloat)green
blue:(CGFloat)blue
alpha:(CGFloat)alpha
{
return [UIColor colorWithRed:red/255.f
green:green/255.f
blue:blue/255.f
alpha:alpha];
}
+ (UIColor *)colorWithWholeRed:(CGFloat)red
green:(CGFloat)green
blue:(CGFloat)blue
{
return [self colorWithWholeRed:red
green:green
blue:blue
alpha:1.0];
}
/**
* @brief 渐变颜色
*
* @param c1 开始颜色
* @param c2 结束颜色
* @param height 渐变高度
*
* @return 渐变颜色
*/
+ (UIColor*)gradientFromColor:(UIColor*)c1 toColor:(UIColor*)c2 withHeight:(int)height
{
CGSize size = CGSizeMake(1, height);
UIGraphicsBeginImageContextWithOptions(size, NO, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
NSArray* colors = [NSArray arrayWithObjects:(id)c1.CGColor, (id)c2.CGColor, nil];
CGGradientRef gradient = CGGradientCreateWithColors(colorspace, (__bridge CFArrayRef)colors, NULL);
CGContextDrawLinearGradient(context, gradient, CGPointMake(0, 0), CGPointMake(0, size.height), 0);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
CGGradientRelease(gradient);
CGColorSpaceRelease(colorspace);
UIGraphicsEndImageContext();
return [UIColor colorWithPatternImage:image];
}
+ (UIColor*)gradientFromColor:(UIColor*)c1 toColor:(UIColor*)c2 withWidth:(int)Width
{
CGSize size = CGSizeMake(Width, 1);
UIGraphicsBeginImageContextWithOptions(size, NO, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
NSArray* colors = [NSArray arrayWithObjects:(id)c1.CGColor, (id)c2.CGColor, nil];
CGGradientRef gradient = CGGradientCreateWithColors(colorspace, (__bridge CFArrayRef)colors, NULL);
CGContextDrawLinearGradient(context, gradient, CGPointMake(0, 0), CGPointMake(size.width, 0), 0);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
CGGradientRelease(gradient);
CGColorSpaceRelease(colorspace);
UIGraphicsEndImageContext();
return [UIColor colorWithPatternImage:image];
}
+ (UIColor*)gradientFromColor:(UIColor*)c1 toColor:(UIColor*)c2 withPoint:(CGPoint )point
{
CGSize size = CGSizeMake(point.x, point.y);
UIGraphicsBeginImageContextWithOptions(size, NO, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
NSArray* colors = [NSArray arrayWithObjects:(id)c1.CGColor, (id)c2.CGColor, nil];
CGGradientRef gradient = CGGradientCreateWithColors(colorspace, (__bridge CFArrayRef)colors, NULL);
CGContextDrawLinearGradient(context, gradient, CGPointMake(0, 0), CGPointMake(size.width, size.height), 0);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
CGGradientRelease(gradient);
CGColorSpaceRelease(colorspace);
UIGraphicsEndImageContext();
return [UIColor colorWithPatternImage:image];
}
@end