Skip to content

Instantly share code, notes, and snippets.

@awave1
Last active July 10, 2019 15:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save awave1/5391395b5cb0eadca10a074607630abd to your computer and use it in GitHub Desktop.
Save awave1/5391395b5cb0eadca10a074607630abd to your computer and use it in GitHub Desktop.
// UIColor+HexString.h
#import <UIKit/UIColor.h>
NS_ASSUME_NONNULL_BEGIN
@interface UIColor (HexString)
+ (UIColor *) colorWithHexString: (NSString *) hexString;
+ (CGFloat) colorComponentFrom: (NSString *) string start: (NSUInteger) start length: (NSUInteger) length;
@end
NS_ASSUME_NONNULL_END
// UIColor+HexString.m
#import "UIColor+HexString.h"
@implementation UIColor (HexString)
+ (UIColor *) colorWithHexString: (NSString *) hexColor {
NSString *hex = [hexColor stringByReplacingOccurrencesOfString: @"#" withString: @""];
NSString *colorString = [hex uppercaseString];
CGFloat alpha;
CGFloat red;
CGFloat blue;
CGFloat green;
switch ([colorString length]) {
case 3:
// RGB
alpha = 1.0f;
red = [self colorComponentFrom: colorString start: 0 length: 1];
green = [self colorComponentFrom: colorString start: 1 length: 1];
blue = [self colorComponentFrom: colorString start: 2 length: 1];
break;
case 4:
// #ARGB
alpha = [self colorComponentFrom: colorString start: 0 length: 1];
red = [self colorComponentFrom: colorString start: 1 length: 1];
green = [self colorComponentFrom: colorString start: 2 length: 1];
blue = [self colorComponentFrom: colorString start: 3 length: 1];
break;
case 6:
// #RRGGBB
alpha = 1.0f;
red = [self colorComponentFrom: colorString start: 0 length: 2];
green = [self colorComponentFrom: colorString start: 2 length: 2];
blue = [self colorComponentFrom: colorString start: 4 length: 2];
break;
case 8:
// #AARRGGBB
alpha = [self colorComponentFrom: colorString start: 0 length: 2];
red = [self colorComponentFrom: colorString start: 2 length: 2];
green = [self colorComponentFrom: colorString start: 4 length: 2];
blue = [self colorComponentFrom: colorString start: 6 length: 2];
break;
default:
[NSException raise:@"Invalid color value" format: @"Color value %@ is invalid. It should be a hex value of the form #RBG, #ARGB, #RRGGBB, or #AARRGGBB", hexColor];
break;
}
return [UIColor colorWithRed: red green: green blue: blue alpha: alpha];
}
+ (CGFloat) colorComponentFrom: (NSString *) string start: (NSUInteger) start length: (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;
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment