iOS - UIColor

简介: 前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIColor : NSObject @available(iOS 2.0, *) public class UIColor : NSObject, NSSecureCoding, NSCopyingUIColor、CIColor 和 CGColor 出现在不同的类库里面,其实就是颜色存储方式不同而已,比如 999 可以用 10 进制、2 进制、16 进制等存储。

前言

    NS_CLASS_AVAILABLE_IOS(2_0) @interface UIColor : NSObject <NSSecureCoding, NSCopying>
    @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 源码 QExtension

  • 适用于 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];
目录
相关文章
|
Android开发 iOS开发 HTML5
iOS 从各种效果图颜色标注生成 UIColor
iOS 从各种效果图颜色标注生成 UIColor 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循“署名-非商业用途-保持一致”创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
970 0
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记13 Drawing绘制、UIColor颜色、Fonts字体
上一话介绍了视图绘制的一些基本原理,这一话继续展开。UIBezierPath可以绘制许多有趣的图形。
1030 0
|
1月前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
98 1
|
1月前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
1月前
|
搜索推荐 IDE API
打造个性化天气应用:iOS开发之旅
【9月更文挑战第35天】在这篇文章中,我们将一起踏上iOS开发的旅程,通过创建一个个性化的天气应用来探索Swift编程语言的魅力和iOS平台的强大功能。无论你是编程新手还是希望扩展你的技能集,这个项目都将为你提供实战经验,帮助你理解从构思到实现一个应用的全过程。让我们开始吧,构建你自己的天气应用,探索更多可能!
61 1
|
2月前
|
IDE Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
|
3天前
|
设计模式 前端开发 Swift
探索iOS开发:从初级到高级的旅程
【10月更文挑战第31天】在这篇文章中,我们将一起踏上iOS开发的旅程。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。我们将从基础开始,逐步深入到更高级的技术和概念。让我们一起探索iOS开发的世界吧!