Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何创建渐变_Ios_Linear Gradients - Fatal编程技术网

Ios 如何创建渐变

Ios 如何创建渐变,ios,linear-gradients,Ios,Linear Gradients,我有这个代码来创建一个渐变背景 CAGradientLayer *gradient = [CAGradientLayer layer]; gradient.frame = self.bounds; UIColor *startColour = [UIColor colorWithHexString:@"#bcdef6"]; UIColor *endColour = [UIColor colorWithHexString:@"#fad7e6"]; UIColor *middleColor = [U

我有这个代码来创建一个渐变背景

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];
如何去除中间的灰色效应?

这是期望的结果:

这是实际结果:

我可以看到您的颜色数组有一个bug,您没有使用中间颜色(白色)的CGColor。通过将数组更改为此,我可以得到您想要的结果

gradient.colors = @[(id)startColour.CGColor, (id)middleColor.CGColor, (id)endColour.CGColor];
通过使用渐变位置,您还可以看到更多的蓝色和粉色,从而产生更好的效果

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

这确实解决了我的问题。你能解释一下“位置”数组的含义吗?这些位置是渐变停止点,介于0.0和1.0之间,就像渐变距离的百分比。因此,与其开始将蓝色和白色混合在0和50%之间,它只混合在20%和50%之间,只剩下前20%的蓝色。根据文档“渐变停止点被指定为介于0和1之间的值。这些值必须单调递增。如果为零,则停止点在整个范围内均匀分布。默认为零。渲染时,颜色在插值之前映射到输出颜色空间。”我仍然不明白?0.2表示蓝色从左下角占据画布的20%?是的,在左下角它将是蓝色的,并且只有在沿对角线的20%距离处蓝色才会开始与白色混合。通过更改渐变停止点,可以缩短或延长颜色混合的距离。将0.2改为0.4,你就会明白我的意思。我用3d平移变换将角度固定到渐变层,使该层比要设置的视图大一点