【问题标题】:How to set gradient color with angle如何使用角度设置渐变颜色
【发布时间】:2017-07-27 08:33:27
【问题描述】:

我想在我的按钮上设置渐变,我必须用两种颜色设置简单的线性渐变(无角度),但我不知道如何在渐变上设置角度值

角度:- 61

下图定义psd渐变叠加效果

提前致谢

【问题讨论】:

  • 查看startPointendPointCAGradientLayer 以设置角度(它设置了“线”,但可以从角度转换)。
  • 如何根据角度值计算起点和终点,因为如果角度值会改变,则在特征中。如果你知道任何基于角度值计算起点和终点的公式,请告诉我@Larme
  • 这很简单。不是真正的编程
  • 是的,但是我可以使用哪个公式,如果你有的话,请告诉我@Larme

标签: ios objective-c gradient


【解决方案1】:

试试吧,也许会有帮助

- (CAGradientLayer *)gradientLayerWithColors:(NSArray *)colors angle:(CGFloat)angle {

CAGradientLayer *layer = [CAGradientLayer layer];
layer.colors = colors;

CGFloat x = angle / 360.f;

CGFloat a = pow(sin((2*M_PI*((x+0.75)/2))),2);
CGFloat b = pow(sin((2*M_PI*((x+0.0)/2))),2);
CGFloat c = pow(sin((2*M_PI*((x+0.25)/2))),2);
CGFloat d = pow(sin((2*M_PI*((x+0.5)/2))),2);

layer.startPoint = CGPointMake(a, b);
layer.endPoint = CGPointMake(c, d);
return layer;

}

【讨论】:

  • 我已经尝试过这个解决方案,但没有设置适当的渐变@Eugene Sokolenko
【解决方案2】:
CAGradientLayer *gradientMask = [CAGradientLayer layer];
gradientMask.frame = CGRectMake(0, 0, myView.bounds.size.width, myView.bounds.size.height);

gradientMask.colors = @[(id)[UIColor redColor].CGColor,
                        (id)[UIColor greenColor].CGColor];
gradientMask.locations = @[@0.0, @0.10, @0.60, @1.0];

[myView.layer insertSublayer:gradientMask atIndex:0];

相应地调整位置值和帧大小。

【讨论】:

  • 我知道,但是如何根据角度值计算起点和终点。如果您对此有任何公式,请告诉我@kaushal
【解决方案3】:

这是由PaintCode 生成的稍作修改的代码,正好解决了这个问题:

UIBezierPath* rectanglePath = [UIBezierPath bezierPathWithRect: self.view.bounds];
UIBezierPath* rectangleRotatedPath = [rectanglePath copy];
CGAffineTransform transform = CGAffineTransformMakeRotation(yourAngleInRadians);
[rectangleRotatedPath applyTransform: transform];
CGRect rectangleBounds = CGPathGetPathBoundingBox(rectangleRotatedPath.CGPath);
transform = CGAffineTransformInvert(transform);

CGPoint startPoint = CGPointApplyAffineTransform(CGPointMake(CGRectGetMinX(rectangleBounds), CGRectGetMidY(rectangleBounds)), transform);
CGPoint endPoint = CGPointApplyAffineTransform(CGPointMake(CGRectGetMaxX(rectangleBounds), CGRectGetMidY(rectangleBounds)), transform);

代码获取您的初始矩形(黑色矩形)和角度(显示为黑线),旋转矩形(您将获得蓝色矩形),然后找到旋转矩形(红色矩形)的边界框。获取边界上的端点(红点)并使用逆变换(蓝点)将它们转换(旋转)回来。

其他解决方案可能是找到矩形和由角度定义的线的交点。

【讨论】:

  • 感谢您的回答,但此解决方案不适用于我@mato
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
  • 2017-08-19
  • 1970-01-01
  • 2012-01-23
相关资源
最近更新 更多