我正在尝试使用CaGradientLayer绘制角度渐变.我知道可以使用startPoint和endPoint定义角度.我可以为一些标准角度计算这些点,如0,90,180,360等.但我希望将这些点制定为任意角度.我尝试使用一些三角函数计算它,但没有取得任何成功.任何人都可以给我任何关于如何计算任意角度这些点的方向吗?
解决方法
这是一种方法,可以创建一个视图,允许根据滑块(或任何东西)的输入360度旋转其双色渐变.传入的滑块值(下面的“x”变量)介于0.0和1.0之间.
在0.0处,梯度是水平的(颜色A在顶部,颜色B在下面),旋转360度到值1.0(与值0.0相同 – 或完整旋转).
例如.当x = 0.25时,左边是颜色A,颜色B是右边.在0.5时,颜色A在下面,颜色B在上面,0.75颜色A在右边,颜色B在左边.它从右向左逆时针旋转.
它需要四个参数:frame,colourA,colourB和输入值(0-1).
-(UIView *)gradientViewWithFrame:(CGRect)frame colourA:(UIColor *)A colourB:(UIColor *)B rotation:(float)x { //x is between 0 and 1,eg. from a slider,representing 0 - 360 degrees //colour A starts on top,with colour B below //rotations move anti-clockwise //1. create the colour view UIView * colourView = [UIView new]; colourView.frame = frame; //2. create the gradient layer CAGradientLayer *gradient = [CAGradientLayer layer]; gradient.frame = colourView.bounds; gradient.colors = [NSArray arrayWithObjects:(id)[A CGColor],(id)[B CGColor],nil]; [colourView.layer insertSublayer:gradient atIndex:0]; //3. create coordinates float a = pow(sinf((2*M_PI*((x+0.75)/2))),2); float b = pow(sinf((2*M_PI*((x+0.0)/2))),2); float c = pow(sinf((2*M_PI*((x+0.25)/2))),2); float d = pow(sinf((2*M_PI*((x+0.5)/2))),2); //4. set the gradient direction [gradient setStartPoint:CGPointMake(a,b)]; [gradient setEndPoint:CGPointMake(c,d)]; return colourView; }