Objective c NSArray from NSString of values vs NSArray of NSStrings
考虑这段简单的演示代码,它旨在提供一种为UIButtons创建颜色渐变数组的简单方法:Objective c NSArray from NSString of values vs NSArray of NSStrings,objective-c,Objective C,考虑这段简单的演示代码,它旨在提供一种为UIButtons创建颜色渐变数组的简单方法: NSString *gradientString=@"#b62f5a, #b32755, #b01f4f, #ad1449, #aa0444"; NSArray *gradientArray = [gradientString componentsSeparatedByString:@","]; NSArray *newGradientArray= [NSArray arrayWi
NSString *gradientString=@"#b62f5a, #b32755, #b01f4f, #ad1449, #aa0444";
NSArray *gradientArray = [gradientString componentsSeparatedByString:@","];
NSArray *newGradientArray= [NSArray arrayWithObjects: @"#b62f5a", @"#b32755", @"#b01f4f", @"#ad1449", @"#aa0444", nil]; // works
NSMutableArray *final=[NSMutableArray array];
for(id cstr in newGradientArray){
[final addObject:(id)[[self colorFromHexString:cstr] CGColor]];
}
[final addObject:[NSNull null]];
btn.titleLabel.textColor=[UIColor whiteColor];
// Set the button Background Color
CAGradientLayer *btnGradient = [CAGradientLayer layer];
btnGradient.frame = btn.bounds;
btnGradient.colors = final;
btnGradient.opacity=0.9f;
// etc, etc button code below
如上所示,使用:
for(id cstr in newGradientArray)
这是正确的。对以下内容做一个小改动:
for(id cstr in gradientArray)
不起作用
作为参考,这是colorFromHexString:
- (UIColor *)colorFromHexString:(NSString *)hexString {
unsigned rgbValue = 0;
hexString=hexString.uppercaseString;
NSScanner *scanner = [NSScanner scannerWithString:hexString];
[scanner setScanLocation:1]; // bypass '#' character
[scanner scanHexInt:&rgbValue];
return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0 green:((rgbValue & 0xFF00) >> 8)/255.0 blue:(rgbValue & 0xFF)/255.0 alpha:1.0];
}
问题在于前两行
NSString *gradientString=@"#b62f5a, #b32755, #b01f4f, #ad1449, #aa0444";
NSArray *gradientArray = [gradientString componentsSeparatedByString:@","];
梯度阵列包含:[@“#b62f5a”、@“#b32755”、@“#b01f4f”、@“#ad1449”、@“#aa0444”]
删除@“#b62f5a、#b32755、#b01f4f、#ad1449、#aa0444”中的所有空格
,它应该可以正常工作
编辑:或根据rmaddy的建议,将分隔符更改为
@“,”
,或将分隔符更改为@“,”
。