博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS - UIColor
阅读量:5112 次
发布时间:2019-06-13

本文共 4501 字,大约阅读时间需要 15 分钟。

前言

NS_CLASS_AVAILABLE_IOS(2_0) @interface UIColor : NSObject 
@available(iOS 2.0, *) public class UIColor : NSObject, NSSecureCoding, NSCopying
  • UIColor、CIColor 和 CGColor 出现在不同的类库里面,其实就是颜色存储方式不同而已,比如 999 可以用 10 进制、2 进制、16 进制等存储。三者之间都是能够方便转换的,特别是很多构造函数。

1、UIColor 的创建

  • Objective-C

    • 使用系统定义好的颜色创建

      UIColor *color1 = [UIColor blueColor];    // 附带设置颜色的透明度    UIColor *color1 = [[UIColor blackColor] colorWithAlphaComponent:0.5];
    • 由白色透明度创建

      // alpha:透明度,1 不透明    UIColor *color2 = [UIColor colorWithWhite:1 alpha:0.5];
    • 由三原色创建

      // arc4random()%256/255.0 获取小于等于 1 大于 0 的随机数字    CGFloat red = arc4random()%256/255.0;    CGFloat green = arc4random()%256/255.0;    CGFloat blue = arc4random()%256/255.0;    // Red,green,blue 值的范围是 0 ~ 1,alpha:透明度,1 不透明    UIColor *color3 = [UIColor colorWithRed:red green:green blue:blue alpha:1];
    • 由图片创建

      UIColor *color4 = [UIColor colorWithPatternImage:[UIImage imageNamed:@"13"]];
    • 由 16 进制字符串创建

      NSString *colorString = @"#FF0000";    // 十六进制数字字符串转十进制数字    NSString *s1 = [colorString substringWithRange:NSMakeRange(1, 2)];    unsigned long c1 = strtoul([s1 UTF8String], 0, 16);    NSString *s2 = [colorString substringWithRange:NSMakeRange(3, 2)];    unsigned long c2 = strtoul([s2 UTF8String], 0, 16);    NSString *s3 = [colorString substringWithRange:NSMakeRange(5, 2)];    unsigned long c3 = strtoul([s3 UTF8String], 0, 16);    // Red,green,blue 值的范围是 0 ~ 1,alpha:透明度,1 不透明    UIColor *color5 = [UIColor colorWithRed:c1/255.0 green:c2/255.0 blue:c3/255.0 alpha:1];
  • Swift

    • 使用系统定义好的颜色创建

      let color1:UIColor = UIColor.blueColor()    // 附带设置颜色的透明度    let color1:UIColor = UIColor.blackColor().colorWithAlphaComponent(0.5)
    • 由白色透明度创建

      // alpha:透明度,1 不透明    let color2:UIColor = UIColor(white: 1, alpha: 0.5)
    • 由三原色创建

      // arc4random()%256/255.0 获取小于等于 1 大于 0 的随机数字    let red:CGFloat = CGFloat(arc4random()%UInt32(256/255.0))    let green:CGFloat = CGFloat(arc4random()%UInt32(256/255.0))    let blue:CGFloat = CGFloat(arc4random()%UInt32(256/255.0))    // Red,green,blue 值的范围是 0 ~ 1,alpha:透明度,1 不透明    let color3:UIColor = UIColor(red: red, green: green, blue: blue, alpha: 1)
    • 由图片创建

      let color4:UIColor = UIColor(patternImage: UIImage(named: "13")!)

2、UIColor 与 CIColor 和 CGColor 的相互转换

  • Objective-C

    // UIColor 转 CGColor    CGColorRef color = [[UIColor greenColor] CGColor];
  • Swift

    // UIColor 转 CGColor    let color:CGColorRef = UIColor.greenColor().CGColor

3、由十六进制颜色值创建 RGB 颜色值

  • 具体实现代码见 GitHub 源码

  • 适用于 0Xc83c23、#c83c23、c83c23 格式的十六进制颜色值。

    /// 由十六进制颜色值创建 RGB 颜色值,带透明度设置    + (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" or "#" if it appears        if ([cString hasPrefix:@"0X"])            cString = [cString substringFromIndex:2];        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、g、b        NSString *rString = [cString substringWithRange:range];        range.location = 2;        NSString *gString = [cString substringWithRange:range];        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];    }    /// 由十六进制颜色值创建 RGB 颜色值    + (UIColor *)colorWithHexString:(NSString *)color {        return [UIColor colorWithHexString:color alpha:1.0f];    }
    // 0X 前缀格式    UIColor *color = [UIColor colorWithHexString:@"0Xc83c23"];    UIColor *color = [UIColor colorWithHexString:@"0Xc83c23" alpha:0.5];    // # 前缀格式    UIColor *color = [UIColor colorWithHexString:@"#c83c23"];    UIColor *color = [UIColor colorWithHexString:@"#c83c23" alpha:0.5];    // 无前缀格式    UIColor *color = [UIColor colorWithHexString:@"c83c23"];    UIColor *color = [UIColor colorWithHexString:@"c83c23" alpha:0.5];

转载于:https://www.cnblogs.com/QianChia/p/5759042.html

你可能感兴趣的文章
[你必须知道的.NET]第二十一回:认识全面的null
查看>>
Java语言概述
查看>>
关于BOM知识的整理
查看>>
使用word发布博客
查看>>
面向对象的小demo
查看>>
微服务之初了解(一)
查看>>
GDOI DAY1游记
查看>>
收集WebDriver的执行命令和参数信息
查看>>
数据结构与算法(三)-线性表之静态链表
查看>>
mac下的mysql报错:ERROR 1045(28000)和ERROR 2002 (HY000)的解决办法
查看>>
MyBaits动态sql语句
查看>>
HDU4405(期望DP)
查看>>
拉格朗日乘子法 那些年学过的高数
查看>>
vs code 的便捷使用
查看>>
Spring MVC @ResponseBody返回中文字符串乱码问题
查看>>
用户空间与内核空间,进程上下文与中断上下文[总结]
查看>>
JS 中的跨域请求
查看>>
JAVA开发环境搭建
查看>>
mysql基础语句
查看>>
Oracle中的rownum不能使用大于>的问题
查看>>