我有来自url数据的颜色值就像这样,"#ff33cc".如何将此值转换为UIColor?我正在尝试使用以下代码行.我没有得到baseColor1的值.看起来我应该把那个捣蛋.还有另一种方法吗?
NSScanner *scanner2 = [NSScanner scannerWithString:@"#ff33cc"];
int baseColor1;
[scanner2 scanHexInt:&baseColor1];
CGFloat red = (baseColor1 & 0xFF0000);
[UIColor colorWithRed:red ...
Run Code Online (Sandbox Code Playgroud)
pro*_*rmr 25
你很接近但是colorWithRed:绿色:蓝色:alpha:期望值范围从0.0到1.0,所以你需要将位向右移动并除以255.0f:
CGFloat red = ((baseColor1 & 0xFF0000) >> 16) / 255.0f;
CGFloat green = ((baseColor1 & 0x00FF00) >> 8) / 255.0f;
CGFloat blue = (baseColor1 & 0x0000FF) / 255.0f;
Run Code Online (Sandbox Code Playgroud)
编辑 - 此外,NSScanner的scanHexInt将在十六进制字符串前跳过0x,但我认为它不会跳过十六进制字符串前面的#字符.您可以添加此行来处理:
[scanner2 setCharactersToBeSkipped:[NSCharacterSet symbolCharacterSet]];
Run Code Online (Sandbox Code Playgroud)
Luc*_*ien 12
我添加了一个字符串替换,因此它接受带有或不带有的十六进制字符串 #
可能的完整代码:
+ (UIColor *)colorWithHexString:(NSString *)stringToConvert
{
NSString *noHashString = [stringToConvert stringByReplacingOccurrencesOfString:@"#" withString:@""]; // remove the #
NSScanner *scanner = [NSScanner scannerWithString:noHashString];
[scanner setCharactersToBeSkipped:[NSCharacterSet symbolCharacterSet]]; // remove + and $
unsigned hex;
if (![scanner scanHexInt:&hex]) return nil;
int r = (hex >> 16) & 0xFF;
int g = (hex >> 8) & 0xFF;
int b = (hex) & 0xFF;
return [UIColor colorWithRed:r / 255.0f green:g / 255.0f blue:b / 255.0f alpha:1.0f];
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12386 次 |
最近记录: |