zoukankan      html  css  js  c++  java
  • iOS

    前言

    	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];
      
  • 相关阅读:
    HDU 3068 Manacher
    HDU 6188最小费用流
    Codeforces Round #442 (Div. 2) Danil and a Part-time Job
    并查集
    HDU 5988最小网络流(浮点数)
    HOJ
    HOJ
    POJ
    POJ
    关于async
  • 原文地址:https://www.cnblogs.com/QianChia/p/5759042.html
Copyright © 2011-2022 走看看