2013-07-09 82 views
0

我已創建3個自定義視圖UIViewController中。在每個自定義視圖中,我使用CAShapeLayer創建了形狀。漸變色到自定義視圖

這些圖層還包含漸變色。現在我想爲自定義視圖設置漸變顏色。當我試圖做到這一點時,它正在崩潰。對於第一視圖,這裏是代碼:

//first component 
    self.aTimeScaleMonthView = [[TimeScaleView alloc] initWithFrame:CGRectMake(ORIGIN_X, frame.origin.y, frame.size.width-(2*ORIGIN_X), HEIGHT_OF_COMPONENT1) withStartDate:startDate endDate:endDate]; 
    self.aTimeScaleMonthView.modeOfScale = A3TimeScaleMonth; 
    self.aTimeScaleMonthView.layer.borderColor = [UIColor blackColor].CGColor; 
    self.aTimeScaleMonthView.layer.borderWidth = BORDER_WIDTH_BOX; 

    CAGradientLayer *gradient = [CAGradientLayer layer]; 
    gradient.frame = self.aTimeScaleMonthView.bounds; 
    gradient.colors = [NSArray arrayWithObjects:[UIColor colorWithRed:0.66 green:0.29 blue:0.22 alpha:1.0], [UIColor colorWithRed:0.62 green:0.51 blue:0.314 alpha:1.0], nil]; 

    [self.aTimeScaleMonthView.layer insertSublayer:gradient atIndex:0]; 
    [self addSubview: self.aTimeScaleMonthView]; 

請幫助我。

回答

2

漸變的顏色應該是CGColorgradient.colors = [NSArray arrayWithObjects:(id)[UIColor colorWithRed:0.66 green:0.29 blue:0.22 alpha:1.0].CGColor, (id)[UIColor colorWithRed:0.62 green:0.51 blue:0.314 alpha:1.0].CGColor, nil];

順便說一句,你忘了爲您的漸變的起點和終點。

+0

很酷...其工作正常 – user007

0

CALayer及其小類取CGColor而不是UIColor。您可以通過訪問UIColor實例的CGColor屬性將UIColor轉換爲核心圖形顏色結構CGColor

而且重要的是要明白:的CoreFoundation結構&那些與相關的C的API,如CoreGraphics中(任何與CG開始有關CoreGraphics中)不能插入NSArray直出,因爲它們不是面向對象的。您必須將結構投射到id以將其放入NSArray實例中。你在你想投射的類型周圍使用parens來投射Objective-C。在這種情況下,你會做到以下幾點:

gradient.colors = @[(id)[UIColor colorWithRed:0.66 green:0.29 blue:0.22 alpha:1.0].CGColor, (id)[UIColor colorWithRed:0.62 green:0.51 blue:0.314 alpha:1.0].CGColor]; 

爲了使你的代碼更具可讀性和你的顏色可重複使用的,你應該指定顏色,描述性的變量,並添加這些變量到NSArray的在他們的地方。

如果您想要一個向上和向下的漸變梯度,則不需要設置startPointendPoint。這是最常見的所需配置,因此是默認配置。此外,如果使用對象文字語法進行數組創建,則優先於@selector(arrayWithObjects:)

不要忘記設置您自定義UIView子類的layerClass類方法。

+0

無論誰低估我沒有評論(特別是給予我的答案正確和高度詳細) - 這是粗魯的,而不是在堆棧溢出行爲的方式。沒有人從沒有描述性評論的downvote中學到什麼是downvote。 –