2011-03-07 44 views
3

我試圖按照以下屏幕截圖使用CGGradientCreateWithColorComponents來應用相同的漸變。iPhone - 用CGGradientCreateWithColorComponents幫助並根據屏幕截圖創建漸變

這是我目前正在使用的,但它不是很正確,我試圖猜測這些值的更好方法。我也想知道如何真正確定這些值是什麼,因爲這個代碼是從一個教程中獲得的,而這個教程並沒有解釋什麼是組件。

CGColorSpaceRef myColorspace = CGColorSpaceCreateDeviceRGB(); 
CGFloat components[8] = { 1, 1, 1, 1, 0.866, 0.866, 0.866, 1 }; 
CGFloat locations[2] = { 0.0, 1.0 }; 

CGGradientRef myGradient = CGGradientCreateWithColorComponents(myColorspace, components, locations, 2); 

enter image description here

回答

10

我打得周圍,並得到這樣的畫面:

enter image description here

顏色:

static const CGFloat colors [] = { 
0.894, 0.894, 0.894, 1.0, 
0.694, 0.694, 0.694, 1.0 
}; 

使用這段代碼:

​​

我不知道它是否足夠接近。

3

有關CGGradient進一步參考,檢查developer reference

但對於一個快速瞭解組件對象必須具有在漸變兩種顏色的RGB +阿爾法值

顏色1 = 1,1,1,1

色2 = 0.866,0.866,0.866,1

位置對象基本上是默認的,所以沒有什麼特別的事情出現在constructor you are using

更多信息,應可幫助您處理上休息它...好運!

+0

我試圖用拾色器具有RGB值摸不着頭腦。但RGB值只能達到255,所以我很困惑爲什麼他們會是0.866? – fuzz 2011-03-07 04:33:49

4

0.866是百分比除以100的RGB。 在應用程序/實用程序中名爲DigitalColor Meter的每臺mac計算機上都有非常好的標準程序。在下拉菜單中選擇RGB作爲百分比。將鼠標放在顏色上,它會顯示紅色,綠色和藍色的百分比值。如果它給你R%76.5你使用0.765。

+0

謝謝,這正是我所需要的。你能給我一隻手來複制所附的圖像嗎?我一直試圖儘可能接近它,但它證明有點難以複製。 – fuzz 2011-04-12 05:18:07

2

梯度徽章

-(void) drawRoundedRectWithContext:(CGContextRef)context withRect:(CGRect)rect{ 
CGFloat radius = CGRectGetMaxY(rect)*self.badgeCornerRoundness; 
CGFloat puffer = CGRectGetMaxY(rect)*0.10; 

CGFloat maxX = CGRectGetMaxX(rect) - puffer; 
CGFloat maxY = CGRectGetMaxY(rect) - puffer; 
CGFloat minX = CGRectGetMinX(rect) + puffer; 
CGFloat minY = CGRectGetMinY(rect) + puffer; 

CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB(); 

CGFloat locations[3] = { 0.0, 0.5, 1.0 }; 
CGFloat colors[] = 
{ 
255.0/255.0, 200.0/255.0, 200.0/255.0, 1.00, 
230/255.0, 0.0/255.0, 0.0/255.0, 1.00, 
190/255.0, 0.0/255.0, 0.0/255.0, 1.00, 
}; 
CGGradientRef gradient = CGGradientCreateWithColorComponents(rgb, colors, locations, 3); 
CGColorSpaceRelease(rgb); 

CGContextBeginPath(context); 
CGContextAddArc(context, maxX-radius, minY+radius, radius, M_PI+(M_PI/2), 0, 0); 
CGContextAddArc(context, maxX-radius, maxY-radius, radius, 0, M_PI/2, 0); 
CGContextAddArc(context, minX+radius, maxY-radius, radius, M_PI/2, M_PI, 0); 
CGContextAddArc(context, minX+radius, minY+radius, radius, M_PI, M_PI+M_PI/2, 0); 
// Close the path 
CGContextClosePath(context);    

CGContextSaveGState(context); 
CGContextClip(context); 
CGContextDrawLinearGradient(context, gradient, CGPointMake(minX,minY), CGPointMake(minX,maxY), kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation); 
CGContextRestoreGState(context); 

}