UIColor 颜色

前言

  • Objective-C

    1
    NS_CLASS_AVAILABLE_IOS(2_0) @interface UIColor : NSObject <NSSecureCoding, NSCopying>
  • Swift

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

1、UIColor 的创建

  • Objective-C

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

      1
      2
      3
      4
      UIColor *color1 = [UIColor blueColor];

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

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

      1
      2
      3
      4
      5
      6
      7
      // 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];
    • 由图片创建

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

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      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

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

      1
      2
      3
      4
      let color1: UIColor = UIColor.blueColor()

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

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

      1
      2
      3
      4
      5
      6
      7
      // 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)
    • 由图片创建

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

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

  • Objective-C

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

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

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

  • 具体实现代码见 GitHub 源码 QExtension

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

    • Objective-C

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      /// 由十六进制颜色值创建 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];
      }
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      // 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];
文章目录
  1. 1. 前言
  2. 2. 1、UIColor 的创建
  3. 3. 2、UIColor 与 CIColor 和 CGColor 的相互转换
  4. 4. 3、由十六进制颜色值创建 RGB 颜色值
隐藏目录