2014-09-30 89 views
3

我有这样的代码来创建一个渐变背景如何创建渐变

CAGradientLayer *gradient = [CAGradientLayer layer]; 
gradient.frame = self.bounds; 
UIColor *startColour = [UIColor colorWithHexString:@"#bcdef6"]; 
UIColor *endColour = [UIColor colorWithHexString:@"#fad7e6"]; 
UIColor *middleColor = [UIColor colorWithHexString:@"#ffffff"]; 

gradient.colors = [NSArray arrayWithObjects:(id)[startColour CGColor],(id)middleColor, (id)[endColour CGColor], nil]; 
gradient.endPoint = CGPointMake(1, 0); 
gradient.startPoint = CGPointMake(0, 1); 
[self.layer insertSublayer:gradient atIndex:0]; 

我如何摆脱在中间的灰色效果?

这是期望的结果: enter image description here

这是实际的结果是: enter image description here

回答

0

我可以看到你的颜色阵列中的错误,你有没有采取中间色的CGColor(白)。通过改变这个数组,我可以得到你想要的结果。

gradient.colors = @[(id)startColour.CGColor, (id)middleColor.CGColor, (id)endColour.CGColor]; 

通过播放渐变位置,您还可以看到更多蓝色和粉红色的颜色,以创造更好的效果。

gradient.locations = @[@0.2f, @0.5f, @0.8f]; 
+0

这确实解决了我的问题。你能解释一下“地点”数组的含义吗? – 2014-09-30 08:16:44

+0

位置是渐变站点,介于0.0和1.0之间,就像渐变距离上的百分比。因此,而不是开始混合0和50%之间的蓝色和白色,它只能混合20%和50%,而前20%只是蓝色。从文档“渐变停止指定为介于0和1之间的值。值必须单调递增,如果为零,则停止在整个范围内均匀分布,默认为零 渲染时,颜色被映射到在插值之前输出色彩空间。“ – 2014-09-30 08:23:32

+0

我还不明白? 0.2意味着蓝色占据左下角20%的画布? – 2014-09-30 08:28:02