2015-04-15 101 views
0
-(void)drawInContext:(CGContextRef)ctx{ 
    size_t gradLocationsNum = 2; 

    CGFloat gradLocations[2] = {0.0f, 1.0f}; 

    CGFloat gradColors[8] = {255f,255f,255f,1f,255f,255f,255f,1f}; 
    //      {R, G, B, A, R, G, B, A} 


    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, gradColors, gradLocations, gradLocationsNum); 
    CGColorSpaceRelease(colorSpace); 

    CGPoint gradCenter= CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2); 
    float gradRadius = MIN(self.bounds.size.width , self.bounds.size.height) ; 

    CGContextDrawRadialGradient (ctx, gradient, gradCenter, 0, gradCenter, gradRadius, kCGGradientDrawsAfterEndLocation); 


    CGGradientRelease(gradient); 
} 

我希望有一個兩種顏色的根本漸變,任何兩種,我不介意。 我重寫了CALayer,並將它作爲CAGradientLayer返回到視圖控制器的SubLayer中。iOS,CGGradientCreateWithColorComponets設置RGBA顏色

從文檔,蘋果狀態:

如果顏色空間是RGBA色彩空間,並且要在漸變中使用兩個 顏色(一個用於起始位置,另一個是結束位置的 ),那麼您需要爲組件提供8個值 - 紅色, 第一種顏色的綠色,藍色和Alpha值,後面是紅色, 第二種顏色的綠色,藍色和Alpha值。

當我提供{165.0f, 42.0f, 42.0f, 1.0f, 0.0f, 100.0f, 255.0f, 1.0f} ,褐青色滿足,我看到的是藍色的外觀色,白色中心。

我設法玩耍並獲得一些不同的顏色,但他們從來沒有完全正確匹配提供的RGBA代碼。 具體如何實現2種顏色的漸變漸變?

回答

1

問題是,您正在使用0到255之間的值。但是在處理浮點顏色時,它的值在0.0到1.0之間(與使用alpha所做的一樣)。

你應該可以看到你所期望的梯度,如果你用255除以值:

CGFloat gradColors[8] = {165.0f/255.0f, 42.0f/255.0f, 42.0f/255.0f, 1.0f, 0.0f, 100.0f/255.0f, 255.0f/255.0f, 1.0f} ;