对UIColor的扩展(OC和Swift)
UIcolor这个类中,系统给的颜色太少了,虽然给我们提供了一个方法(光的三原色,根据红,绿,蓝光的比例调出很多颜色,RGB)colorWithRed:green:blue:alpha,但是用起来还是很麻烦,在这人给大家介绍一个简单的方法,就是自己对UIColor扩展,写一个方法 先介绍一下要写什么样的方法: 这个方法里我们需要传一个字符串(比如:@"00ff00"),就是一个颜色对应的RGB值,然后返回给我相应的颜色,我们不需要用colorWithRed:green:blue:alpha,写的参数相对比较多,麻烦。 传的是字符串,我们需要把字符串扫描然后转换成十进制,如下: OC demo: +(UIColor *)colorWithHexString:(NSString *)stringToConvert { // 需要用到NSScanner类,可以扫描字符串,从中挑出我们需要的字符 // 我们需要扫描传过来字符串,从中挑出16进制字符,转换成10进制 // 初始化NSScanner对象scanner NSScanner *scanner = [NSScanner scannerWithString:stringToConvert]; // 定义一个无符号变量 unsigned hexNum; // 方法scanHexInt:可以扫描scanner获取16进制的数据转换成10进制赋值给hexNum // 返回BOOL数据类型,如果没有获得整型数值直接return nil; if (![scanner scanHexInt:&hexNum]) return nil; // 获得整型数值后return 调用方法colorWithRGBHex: return [UIColor colorWithRGBHex:hexNum]; } + (UIColor *)colorWithRGBHex:(UInt32)hex { // 用到位运算符>>(整型对应二进制数右移几个位,舍弃低位,然后获得的二进制数的高位补零,即左端补零)和&(安位与,二进制数的相应位取与) // 通过下面的表达式可以从类似@"ffaacc"的字符串中提取ff,aa,cc转换成10进制赋值给变量r,g,b int r = (hex >> 16) & 0xFF; int g = (hex >> 8) & 0xFF; int b = (hex) & 0xFF; // 调用系统的方法colorWithRed:green:blue:alpha,返回我们想要的颜色 return [UIColor colorWithRed:r / 255.0f green:g / 255.0f blue:b / 255.0f alpha:1.0f]; } Swift demo: 原理同上 import UIKit extension UIColor { class private func colorWithRGBHex(RGBHex:UInt32) -> UIColor { var r:CGFloat = (CGFloat)((RGBHex >> 16) & 0xFF) var g:CGFloat = (CGFloat)((RGBHex >> 8) & 0xFF) var b:CGFloat = (CGFloat)(RGBHex & 0xFF) return UIColor(red: r / 255.0,green: g / 255.0,blue: b / 255.0,alpha: 1) }
class func colorWithHexString(#hexString:String) -> UIColor { var scanner = NSScanner(string: hexString) var hexNum:UInt32 = 0 if scanner.scanHexInt(&hexNum) == false { return UIColor.clearColor() } else { return UIColor.colorWithRGBHex(hexNum) } } } 新手自己的一些理解,理解错的地方各路大神不吝赐教~~~~~~ 自己可以封装成一个demo,应该挺有用的 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |