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,应该挺有用的
总结以上是内存溢出为你收集整理的对UIColor的扩展(OC和Swift)全部内容,希望文章能够帮你解决对UIColor的扩展(OC和Swift)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)