Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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 CAGradientLayer在4个不同的角上具有4种颜色_Ios_Swift_Gradient_Cagradientlayer - Fatal编程技术网

Ios CAGradientLayer在4个不同的角上具有4种颜色

Ios CAGradientLayer在4个不同的角上具有4种颜色,ios,swift,gradient,cagradientlayer,Ios,Swift,Gradient,Cagradientlayer,是否可以在iOS中创建具有4种不同颜色的渐变(我使用的是Swift,但Objective-C中的一个示例也很有用),但每个颜色都来自不同的角 我已经创建了一个渐变,可以从左上->右下或者左下->右上放置颜色,但这只适用于2种颜色。以下是我尝试的代码: let gradientColors: Array <AnyObject> = [bottomColor1.CGColor, topColor2.CGColor] let gradientLayer: CAGradientLayer =

是否可以在iOS中创建具有4种不同颜色的渐变(我使用的是Swift,但Objective-C中的一个示例也很有用),但每个颜色都来自不同的角

我已经创建了一个渐变,可以从左上->右下或者左下->右上放置颜色,但这只适用于2种颜色。以下是我尝试的代码:

let gradientColors: Array <AnyObject> = [bottomColor1.CGColor, topColor2.CGColor]
let gradientLayer: CAGradientLayer = CAGradientLayer()
gradientLayer.colors = gradientColors
gradientLayer.locations = gradientLocations
gradientLayer.startPoint = CGPointMake(0.0, 1.0);
gradientLayer.endPoint = CGPointMake(1.0, 0.0);
let gradientColors:Array=[bottomColor1.CGColor,topColor2.CGColor]
让gradientLayer:CAGradientLayer=CAGradientLayer()
gradientLayer.colors=GradientColor
gradientLayer.locations=gradientLocations
gradientLayer.startPoint=CGPointMake(0.0,1.0);
gradientLayer.endPoint=CGPointMake(1.0,0.0);

这成功地创建了从一个角到另一个角的2色渐变,其中
bottomColor1
topColor2
UIColor
s。但是,我如何在另外两个角创建一个类似的渐变,并添加两种颜色?

感谢@Martin R的建议,这里有一些代码创建了一个效果非常好的混合。因为有这么多的颜色,它在中间变得很暗,但最终得到了想要的效果:

let gradientColors: Array <AnyObject> = [topColor1.CGColor, UIColor.clearColor().CGColor]
let gradientLocations: Array <AnyObject> = [0.0, 1.0]
let gradientLayer: CAGradientLayer = CAGradientLayer()
gradientLayer.colors = gradientColors
gradientLayer.locations = gradientLocations
gradientLayer.startPoint = CGPointMake(0.0, 0.0);
gradientLayer.endPoint = CGPointMake(1.0, 1.0);

let gradientColors2: Array <AnyObject> = [bottomColor1.CGColor, UIColor.clearColor().CGColor]
let gradientLayer2: CAGradientLayer = CAGradientLayer()
gradientLayer2.colors = gradientColors2
gradientLayer2.locations = gradientLocations
gradientLayer2.startPoint = CGPointMake(0.0, 1.0);
gradientLayer2.endPoint = CGPointMake(1.0, 0.0);


let gradientColors3: Array <AnyObject> = [UIColor.clearColor().CGColor, topColor2.CGColor]
let gradientLayer3: CAGradientLayer = CAGradientLayer()
gradientLayer3.colors = gradientColors3
gradientLayer3.locations = gradientLocations
gradientLayer3.startPoint = CGPointMake(0.0, 0.0);
gradientLayer3.endPoint = CGPointMake(1.0, 1.0);

let gradientColors4: Array <AnyObject> = [UIColor.clearColor().CGColor, bottomColor2.CGColor]
let gradientLayer4: CAGradientLayer = CAGradientLayer()
gradientLayer4.colors = gradientColors4
gradientLayer4.locations = gradientLocations
gradientLayer4.startPoint = CGPointMake(0.0, 1.0);
gradientLayer4.endPoint = CGPointMake(1.0, 0.0);

因此,为了最终确定,可以用4种不同的颜色绘制一个4角渐变…中间变得很暗,但上面是如何做到的。

认为这解决了这个问题,似乎也摆脱了“暗效果”。它不是使用CAGradientLayer,而是一个自定义UIView。

据我所知,核心图形只支持线性和径向着色。这不是线性的吗,只有两种以上的颜色?不,渐变层只能进行分段线性着色。
位置
中的中间点位于参数空间中,而不是视图中的任意点。比较。好的,我知道
位置
就在参数空间中。你之前提到古劳德阴影是一个可能的解决方案,但基本上没有办法从本机实现吗?不,我不这么认为。也许可以覆盖4个线性着色,每个着色从一个角的纯色到另一个角的透明白色。只是个主意。
let background1 : CAGradientLayer = gradientLayer;
background1.frame = blendViewFrame;
let background2 : CAGradientLayer = gradientLayer2;
background2.frame = blendViewFrame;
let background3 : CAGradientLayer = gradientLayer3;
background3.frame = blendViewFrame;
let background4 : CAGradientLayer = gradientLayer4;
background4.frame = blendViewFrame;
blendView.layer.insertSublayer(background1, atIndex: 0)
blendView.layer.insertSublayer(background2, atIndex: 1)
blendView.layer.insertSublayer(background3, atIndex: 2)
blendView.layer.insertSublayer(background4, atIndex: 3)