美文网首页
Objective-C颜色处理

Objective-C颜色处理

作者: 朱思明 | 来源:发表于2017-02-03 11:42 被阅读152次

一、设置颜色的透明度

@implementation UIColor (Alpha)
/*
 * 调整当前颜色的透明度,获取新的颜色对象
 */
- (UIColor *)colorWithAlpha:(CGFloat)alpha { 
    // 当前颜色 
    CGFloat a = 1; 
    CGFloat r = 1; 
    CGFloat g = 1; 
    CGFloat b = 1; 
    [self getRed: &r green: &g blue: &b alpha: &a]; 
    return [UIColor colorWithRed: r green: g blue: b alpha: alpha];
}
@end

二、获取当前颜色和另一个颜色对象的过渡色

@implementation UIColor (ProgressColor)
/*
 * 获取当前颜色,到另一颜色之间的过渡色
 */
- (UIColor *)progressColorWithToColor:(UIColor *)toColor progress:(CGFloat)progress { 
    // 开始颜色 
    CGFloat f_a = 1; 
    CGFloat f_r = 1; 
    CGFloat f_g = 1; 
    CGFloat f_b = 1; 
    [self getRed: &f_r green: &f_g blue: &f_b alpha: &f_a]; 
    // 将要显示的颜色 
    CGFloat t_a = 1; 
    CGFloat t_r = 1; 
    CGFloat t_g = 1; 
    CGFloat t_b = 1; 
    [toColor getRed: &t_r green: &t_g blue: &t_b alpha: &t_a];
    // 要显示的颜色 
    CGFloat a = f_a + (t_a - f_a) * progress; 
    CGFloat r = f_r + (t_r - f_r) * progress; 
    CGFloat g = f_g + (t_g - f_g) * progress; 
    CGFloat b = f_b + (t_b - f_b) * progress; 
    return [UIColor colorWithRed: r green: g blue: b alpha: alpha];
}
@end

三、把16进制颜色对象转换为UIColor对象

@implementation UIColor (StringToColor)
/*
 * 调整当前颜色的透明度,获取新的颜色对象
 * colorString : 字符串支持rgb 和 argb 格式 前缀可以使用‘#’和'0X'
 */
+ (UIColor *)getColorWithColorString:(NSString *)colorString { 
    // 获取当前颜色字符串对应的argb数据 
    NSDictionary *argb = [self getColorARGBWithColorString:colorString]; 
    int a = [argb[@"a"] intValue]; 
    int r = [argb[@"r"] intValue]; 
    int g = [argb[@"g"] intValue]; 
    int b = [argb[@"b"] intValue]; 
    return [UIColor colorWithRed:r / 255.0f green:g / 255.0f blue:b / 255.0f alpha:a / 255.0f];
}
// 颜色解析
+ (NSDictionary *)getColorARGBWithColorString:(NSString *)colorString {
    if ((colorString.length == 10 && [colorString.uppercaseString hasPrefix:@"0X"]) || (colorString.length == 9 && [colorString hasPrefix:@"#"])) { 
        // 1.当前是argb格式 OXFFFFFFFF 或者 #FFFFFFFF 
        if ([colorString hasPrefix:@"#"]) { 
            colorString = [colorString substringFromIndex:1]; 
        } else { 
            colorString = [colorString substringFromIndex:2]; 
        }
        NSString *alphaString = [colorString substringWithRange:NSMakeRange(0, 2)];
        //透明度 
        NSString *redString = [colorString substringWithRange:NSMakeRange(2, 2)]; 
        NSString *greenString = [colorString substringWithRange:NSMakeRange(4, 2)]; 
        NSString *blueString = [colorString substringWithRange:NSMakeRange(6, 2)]; 
        unsigned int a, r, g, b; 
        [[NSScanner scannerWithString:alphaString] scanHexInt:&a]; 
        [[NSScanner scannerWithString:redString] scanHexInt:&r]; 
        [[NSScanner scannerWithString:greenString] scanHexInt:&g]; 
        [[NSScanner scannerWithString:blueString] scanHexInt:&b]; 
        return @{@"a": @(a),@"r": @(r), @"g": @(g), @"b": @(b)}; 
    } else if ((colorString.length == 8 && [colorString.uppercaseString hasPrefix:@"0X"]) || (colorString.length == 7 && [colorString hasPrefix:@"#"])) { 
        // 1.当前是rgb格式 OXFFFFFF 或者 #FFFFFF 
        if ([colorString hasPrefix:@"#"]) { 
            colorString = [colorString substringFromIndex:1]; 
        } else { 
            colorString = [colorString substringFromIndex:2]; 
        } 
        NSString *redString = [colorString substringWithRange:NSMakeRange(0, 2)]; 
        NSString *greenString = [colorString substringWithRange:NSMakeRange(2, 2)]; 
        NSString *blueString = [colorString substringWithRange:NSMakeRange(4, 2)];
        unsigned int r, g, b; 
        [[NSScanner scannerWithString:redString] scanHexInt:&r]; 
        [[NSScanner scannerWithString:greenString] scanHexInt:&g]; 
        [[NSScanner scannerWithString:blueString] scanHexInt:&b];
        return @{@"a": @(255),@"r": @(r), @"g": @(g), @"b": @(b)}; 
    } else { 
        return @{@"a": @(255),@"r": @(255), @"g": @(255), @"b": @(255)}; 
    }
}
@end

更多分享:

Github:https://github.com/zhusiming/
GitBook:https://zhusiming.gitbooks.io/smbook/

相关文章

  • Objective-C颜色处理

    一、设置颜色的透明度 二、获取当前颜色和另一个颜色对象的过渡色 三、把16进制颜色对象转换为UIColor对象 更...

  • OC @synchronized

    objective-c @synchronized 锁用法 Objective-C除了提供异常处理机制外,还提供了...

  • iOS开发常用的宏定义

    Objective-C常用宏/*! 字体 */ /*! 颜色宏定义 */ /*! 弱引用宏 */ /*! 输出显示...

  • 【Objective-C】简单使用断言和异常

    学习文章 Objective-C - 异常处理(Exception) 简单用法

  • iOS--基础1

    异常处理--Exception Handling Objective-C语言具有类似于Java和c++的异常处理...

  • Objective-C try/catch异常处理机制原理(转)

    Objective-C使用@try @catch @finally来捕获并处理异常。处理异常需要用到NSExcep...

  • Swift----声明

    在Objective-C中,通过使用指针来处理对象引用,指针可以为空,在Objective-C中称为nil。在Sw...

  • Selector & SEL

    Objective-C中的Runtime 消息处理之performSelector IOS SEL (@selec...

  • Android 颜色处理

    需求 在最近的项目开发中遇到了这种UI,顶部有一组彩色圆形按钮。选中以后颜色会加深。这样的按钮一共有十二个。 而设...

  • OC->Swift advanced tips(1)

    记录从Objective-C转向Swift过程中的一些高级用法1.预处理宏C/C++/Objective-C中可以...

网友评论

      本文标题:Objective-C颜色处理

      本文链接:https://www.haomeiwen.com/subject/vjkdittx.html