我正在尝试在运行时生成具有渐变颜色背景(纯色到透明)的视图.有没有办法做到这一点?
我知道如何绘制一条简单的线条:
CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0);
CGContextMoveToPoint(context, x, y);
CGContextAddLineToPoint(context, x2, y2);
CGContextStrokePath(context);
Run Code Online (Sandbox Code Playgroud)
我知道如何做一个渐变矩形,ig:
CGColorSpaceRef myColorspace=CGColorSpaceCreateDeviceRGB();
size_t num_locations = 2;
CGFloat locations[2] = { 1.0, 0.0 };
CGFloat components[8] = { 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0 };
CGGradientRef myGradient = CGGradientCreateWithColorComponents(myColorspace, components, locations, num_locations);
CGPoint myStartPoint, myEndPoint;
myStartPoint.x = 0.0;
myStartPoint.y = 0.0;
myEndPoint.x = 0.0;
myEndPoint.y = 10.0;
CGContextDrawLinearGradient (context, myGradient, myStartPoint, myEndPoint, 0);
Run Code Online (Sandbox Code Playgroud)
但是我怎么能画一条渐变的线条,ig从黑色渐变到白色(也可能在另一边渐渐变成黑色)?
我有一个关于UIBezierPath的问题.
例如,我有这条路:

现在我想要一个从白色到红色的颜色渐变.从左到右.
这是我的代码:
UIBezierPath *bezierPath;
bezierPath = [UIBezierPath bezierPathWithArcCenter:_center radius:_radius startAngle:((4 * angle)) endAngle:(((20) * angle)) clockwise:YES];
[bezierPath addLineToPoint:_center];
[bezierPath closePath];
UIColor *color = [UIColor colorWithHue:0/sectors saturation:1. brightness:1. alpha:1];
[color setFill];
[color setStroke];
[bezierPath fill];
[bezierPath stroke];
Run Code Online (Sandbox Code Playgroud)
谁能帮我?
编辑1:
我有这个色轮:
UIBezierPath *bezierPath;
for ( int i = 0; i < 360; i++) {
bezierPath = [UIBezierPath bezierPathWithArcCenter:_center radius:_radius startAngle:((i * angle)) endAngle:(((i + 1) * angle)) clockwise:YES];
[bezierPath addLineToPoint:_center];
[bezierPath closePath];
UIColor *color = [UIColor colorWithHue:i/sectors saturation:1. brightness:1. alpha:1]; …Run Code Online (Sandbox Code Playgroud) 我有一个相对直接的实现使用CALayer对象设置的进度视图.进度视图本身是UIView的子视图.
以下是设置进度环的代码:
self.progressRingLayer = CAShapeLayer()
let innerRect = CGRectInset(bounds, CGFloat(self.lineWidth) / 2, CGFloat(self.lineWidth) / 2)
let innerPath = UIBezierPath(ovalInRect: innerRect)
self.progressRingLayer.path = innerPath.CGPath
self.progressRingLayer.fillColor = UIColor.clearColor().CGColor
self.progressRingLayer.strokeColor = kProgressColor.CGColor
self.progressRingLayer.anchorPoint = CGPointMake(0.5, 0.5)
self.progressRingLayer.transform = CATransform3DRotate(self.progressRingLayer.transform, (CGFloat(M_PI))*1, 0, 0, 1)
self.progressRingLayer.lineCap = kCALineCapRound
self.progressRingLayer.lineWidth = CGFloat(self.lineWidth)
self.layer.addSublayer(self.progressRingLayer)
Run Code Online (Sandbox Code Playgroud)
我现在要做的是向跟随(或弯曲)路径的progressRingLayer添加渐变.我成功地为填充添加了线性渐变,但不仅仅是路径.
这是我想要的效果的一个例子:

到目前为止,我发现的所有内容都需要一些额外的步骤,其中CoreGraphics和CGContext不太适合我的实现.任何帮助都会很棒,谢谢!
我从这些链接中得到了一些参考 -
我已经经历了"HSV色彩空间"的概念.但我想借助于使用RGB绘制色轮CAGradientLayer.
这是使用简单的RGB颜色数组制作色轮的代码片段UIBezierPath-
func drawColorWheel()
{
context?.saveGState()
range = CGFloat(100.00 / CGFloat(colorArray.count))
for k in 0 ..< colorArray.count
{
drawSlice(startPercent: CGFloat(k) * range, endPercent: CGFloat(CGFloat(k + 1) * range), color: colorArray.object(at: k) as! UIColor)
}
context?.restoreGState()
}
func drawSlice(startPercent: CGFloat, endPercent: CGFloat, color: UIColor)
{
let startAngle = getAngleAt(percentage: startPercent)
let endAngle = getAngleAt(percentage: endPercent)
let path = getArcPath(startAngle: startAngle, endAngle: endAngle)
color.setFill()
path.fill()
}
Run Code Online (Sandbox Code Playgroud)
凡getAngleAt()和getArcPath()是私人活动的角度来绘制路径.
这是我的代码的最终输出 …
我有一个UIBezierPath内部自定义UIView, draw(). 我想填充那条路径,让我们说一个从底部到顶部的矩形。我该如何实现这一点。
从这里我看到了使用CAShapeLayer它的可能。这对动画效果很好,但在矩形上从下到上没有填充。请指导。