2015-07-12 48 views
0

我正在使用UIPickerView从具有十六进制颜色代码列表的数组中读取数据,然后用它来填充具有所有不同颜色的选取器视图的每一行。我正在使用将十六进制代码转换为RGB代码的方法,以及一个UIlabel来更改每一行的颜色。我for循环更改UIPickerView的每一行UILabel颜色工作得很好,但是当我尝试执行相同的颜色更改使用相同的十六进制代码转换与圆形的笔触颜色我正在与视图中的CAShapeLayer绘图, 什么都没发生 。看来UIColor不接受十六进制代码转换,尽管UIPickerView中每行的UILabel背景都是这样。任何人都知道为什么这不起作用?CAShapeLayer描边颜色未读取十六进制颜色代码转换

这里的for循环改变UILabel的背景颜色在UIPickerView每一行:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{ 

UILabel *pickerLabel = [[UILabel alloc]init]; 

for (int currentIndex=0; currentIndex<[self.colorArray count]; currentIndex++) { 

    [pickerLabel setBackgroundColor: [self colorWithHexString:[self.colorArray objectAtIndex:row]]]; 

} 

return pickerLabel; 
} 

这里的UIPickerView委托方法在那里我试图改变CAShapeLayer的笔触颜色我的工作与:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ 

NSString *rowColorHex = [self.colorArray objectAtIndex:[self.picker selectedRowInComponent:0]]; 

[self.circleLayer setStrokeColor: [self colorWithHexString: rowColorHex]; 

//NSLog(@"%@", rowColorHex); 
} 

这是我如何创建圆形状。请注意,我省略了初始笔触颜色。我可以指定在UIPickerView的委托方法在我的问题是,在相同的方式笔触颜色,以及它工作得很好:

CAShapeLayer *circleLayer = [CAShapeLayer layer]; 
circleLayer.lineWidth = 50; 
circleLayer.fillColor = [[UIColor clearColor] CGColor]; 
//circleLayer.strokeColor = [[UIColor redColor] CGColor]; 
[self.imageToBeCropped.layer addSublayer:circleLayer]; 
self.circleLayer = circleLayer; 

最后,这里是十六进制转换方法:

-(UIColor*)colorWithHexString:(NSString*)hex{ 
NSString *cString = [[hex stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString]; 

// String should be 6 or 8 characters 
if ([cString length] < 6) return [UIColor grayColor]; 

// strip 0X if it appears 
if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2]; 

if ([cString length] != 6) return [UIColor grayColor]; 

// Separate into r, g, b substrings 
NSRange range; 
range.location = 0; 
range.length = 2; 
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:1.0f]; 
} 
+0

你能否给我们提供一个关于'UIPickerView'如何呈现的截图? – ndmeiri

回答

1

核心动画层不接受UIKit类型 - 您需要使用Core Graphics等效物,在这种情况下为CGColorRef。您已在代码中执行此操作,但您的-colorWithHexString:方法返回UIColor

[self.circleLayer setStrokeColor:[[self colorWithHexString: rowColorHex] CGColor]]; 
+0

感谢您的反馈!我知道这与CGColor有关,但我不知道如何把它放在一起;我只是想念一件事! – embersofadyingfire

相关问题