Zba*_*itZ 7 core-graphics ios cagradientlayer swift
我正在开展一项任务,我必须创建一个没有填充但是渐变笔划的圆.作为参考,这是我追求的最终结果;
鉴于应用程序的其他情况,我正在画我的圈子;
let c = UIGraphicsGetCurrentContext()!
c.saveGState()
let clipPath: CGPath = UIBezierPath(roundedRect: converted_rect, cornerRadius: converted_rect.width / 2).cgPath
c.addPath(clipPath)
c.setLineWidth(9.0)
c.setStrokeColor(UIColor.blue.cgColor)
c.closePath()
c.strokePath()
c.restoreGState()
let result = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
Run Code Online (Sandbox Code Playgroud)
这导致具有蓝色笔划的圆圈.尽管在SO周围进行了很多搜索,我仍在努力弄清楚如何setStrokeColor用渐变而不是蓝色替换它.我最大的成功来自于创建一个CAGradientLayer,然后用CAShapeLayer路径创建一个掩盖它,但我只能创建一个实心圆而不是空心圆.
谢谢!
基本思想是使用您的路径作为剪切路径,然后绘制渐变.
let c = UIGraphicsGetCurrentContext()!
let clipPath: CGPath = UIBezierPath(ovalIn: converted_rect).cgPath
c.saveGState()
c.setLineWidth(9.0)
c.addPath(clipPath)
c.replacePathWithStrokedPath()
c.clip()
// Draw gradient
let colors = [UIColor.blue.cgColor, UIColor.red.cgColor]
let offsets = [ CGFloat(0.0), CGFloat(1.0) ]
let grad = CGGradient(colorsSpace: CGColorSpaceCreateDeviceRGB(), colors: colors as CFArray, locations: offsets)
let start = converted_rect.origin
let end = CGPoint(x: converted_rect.maxX, y: converted_rect.maxY)
c.drawLinearGradient(grad!, start: start, end: end, options: [])
c.restoreGState()
let result = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
Run Code Online (Sandbox Code Playgroud)
CGGradient使用所需的颜色设置第一个.然后使用线性渐变drawLinearGradient.对于径向渐变,请使用drawRadialGradient.
| 归档时间: |
|
| 查看次数: |
1100 次 |
| 最近记录: |