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,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
943 0
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记13 Drawing绘制、UIColor颜色、Fonts字体
上一话介绍了视图绘制的一些基本原理,这一话继续展开。UIBezierPath可以绘制许多有趣的图形。
1010 0
|
2月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
98 3
|
4月前
|
存储 iOS开发
iOS 开发,如何进行应用的本地化(Localization)?
iOS 开发,如何进行应用的本地化(Localization)?
123 2
|
2月前
|
API 开发工具 Android开发
iOS 和 Android 平台的开发有哪些主要区别?
iOS与Android开发区别:iOS用Objective-C/Swift,App Store唯一下载渠道;Android用Java/Kotlin,多商店发布(如Google Play、华为市场)。设计上,iOS简洁一致,Android灵活可定制。开发工具,iOS用Xcode,Android用Android Studio。硬件和系统多样性,iOS统一,Android复杂。权限管理、审核流程及API各有特点,开发者需依据目标平台特性进行选择。
36 3
|
7天前
|
前端开发 Android开发 iOS开发
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
【4月更文挑战第30天】Flutter 框架实现跨平台移动应用,通过一致的 UI 渲染(Skia 引擎)、热重载功能和响应式框架提高开发效率和用户体验。然而,Android 和 iOS 的系统差异、渲染机制及编译过程影响性能。性能对比显示,iOS 可能因硬件优化提供更流畅体验,而 Android 更具灵活性和广泛硬件支持。开发者可采用代码、资源优化和特定平台优化策略,利用性能分析工具提升应用性能。
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
|
7天前
|
存储 Swift iOS开发
使用Swift开发一个简单的iOS应用的详细步骤。
使用Swift开发iOS应用的步骤包括:创建Xcode项目,设计界面(Storyboard或代码),定义数据模型,实现业务逻辑,连接界面和逻辑,处理数据存储(如Core Data),添加网络请求(必要时),调试与测试,根据测试结果优化改进,最后提交至App Store或其它平台发布。
20 0