Created
June 22, 2013 20:32
-
-
Save andrei512/5842476 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // | |
| // UIColor+lerp.h | |
| // Lotus | |
| // | |
| // Created by Andrei on 3/3/13. | |
| // Copyright (c) 2013 Andrei. All rights reserved. | |
| // | |
| #import <UIKit/UIKit.h> | |
| @interface UIColor (lerp) | |
| - (UIColor *)colorByCombiningWithColor:(UIColor *)toColor power:(float)p; | |
| @end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // | |
| // UIColor+lerp.m | |
| // Lotus | |
| // | |
| // Created by Andrei on 3/3/13. | |
| // Copyright (c) 2013 Andrei. All rights reserved. | |
| // | |
| #import "UIColor+lerp.h" | |
| #define LERP(A, B, X) ((A) * (1.0 - (X)) + (B) * (X)) | |
| @implementation UIColor (lerp) | |
| - (CGColorSpaceModel) colorSpaceModel | |
| { | |
| return CGColorSpaceGetModel(CGColorGetColorSpace(self.CGColor)); | |
| } | |
| - (NSString *) colorSpaceString | |
| { | |
| switch ([self colorSpaceModel]) | |
| { | |
| case kCGColorSpaceModelUnknown: | |
| return @"kCGColorSpaceModelUnknown"; | |
| case kCGColorSpaceModelMonochrome: | |
| return @"kCGColorSpaceModelMonochrome"; | |
| case kCGColorSpaceModelRGB: | |
| return @"kCGColorSpaceModelRGB"; | |
| case kCGColorSpaceModelCMYK: | |
| return @"kCGColorSpaceModelCMYK"; | |
| case kCGColorSpaceModelLab: | |
| return @"kCGColorSpaceModelLab"; | |
| case kCGColorSpaceModelDeviceN: | |
| return @"kCGColorSpaceModelDeviceN"; | |
| case kCGColorSpaceModelIndexed: | |
| return @"kCGColorSpaceModelIndexed"; | |
| case kCGColorSpaceModelPattern: | |
| return @"kCGColorSpaceModelPattern"; | |
| default: | |
| return @"Not a valid color space"; | |
| } | |
| } | |
| - (BOOL) canProvideRGBComponents | |
| { | |
| return (([self colorSpaceModel] == kCGColorSpaceModelRGB) || | |
| ([self colorSpaceModel] == kCGColorSpaceModelMonochrome)); | |
| } | |
| - (CGFloat) red | |
| { | |
| NSAssert (self.canProvideRGBComponents, @"Must be a RGB color to use -red, -green, -blue"); | |
| const CGFloat *c = CGColorGetComponents(self.CGColor); | |
| return c[0]; | |
| } | |
| - (CGFloat) green | |
| { | |
| NSAssert (self.canProvideRGBComponents, @"Must be a RGB color to use -red, -green, -blue"); | |
| const CGFloat *c = CGColorGetComponents(self.CGColor); | |
| if ([self colorSpaceModel] == kCGColorSpaceModelMonochrome) return c[0]; | |
| return c[1]; | |
| } | |
| - (CGFloat) blue | |
| { | |
| NSAssert (self.canProvideRGBComponents, @"Must be a RGB color to use -red, -green, -blue"); | |
| const CGFloat *c = CGColorGetComponents(self.CGColor); | |
| if ([self colorSpaceModel] == kCGColorSpaceModelMonochrome) return c[0]; | |
| return c[2]; | |
| } | |
| - (CGFloat) alpha | |
| { | |
| const CGFloat *c = CGColorGetComponents(self.CGColor); | |
| return c[CGColorGetNumberOfComponents(self.CGColor)-1]; | |
| } | |
| - (UIColor *)colorByCombiningWithColor:(UIColor *)toColor power:(float)p { | |
| return [UIColor colorWithRed:LERP(self.red, toColor.red, p) | |
| green:LERP(self.green, toColor.green, p) | |
| blue:LERP(self.blue, toColor.blue, p) | |
| alpha:LERP(self.alpha, toColor.alpha, p)]; | |
| } | |
| @end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment