2011-03-07 69 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); 

}