Skip to content

Instantly share code, notes, and snippets.

@andrei512
Created June 22, 2013 20:32
Show Gist options
  • Select an option

  • Save andrei512/5842476 to your computer and use it in GitHub Desktop.

Select an option

Save andrei512/5842476 to your computer and use it in GitHub Desktop.
//
// 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
//
// 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