【发布时间】:2016-05-07 18:33:56
【问题描述】:
我想在 Swift 中复制它.. 进一步阅读:How to draw a linear gradient arc with Qt QPainter?
我已经知道如何在矩形视图内绘制渐变:
override func drawRect(rect: CGRect) {
let currentContext = UIGraphicsGetCurrentContext()
CGContextSaveGState(currentContext)
let colorSpace = CGColorSpaceCreateDeviceRGB()
let startColor = MyDisplay.displayColor(myMetric.currentValue)
let startColorComponents = CGColorGetComponents(startColor.CGColor)
let endColor = MyDisplay.gradientEndDisplayColor(myMetric.currentValue)
let endColorComponents = CGColorGetComponents(endColor.CGColor)
var colorComponents
= [startColorComponents[0], startColorComponents[1], startColorComponents[2], startColorComponents[3], endColorComponents[0], endColorComponents[1], endColorComponents[2], endColorComponents[3]]
var locations: [CGFloat] = [0.0, 1.0]
let gradient = CGGradientCreateWithColorComponents(colorSpace, &colorComponents, &locations, 2)
let startPoint = CGPointMake(0, 0)
let endPoint = CGPointMake(1, 8)
CGContextDrawLinearGradient(currentContext, gradient, startPoint, endPoint, CGGradientDrawingOptions.DrawsAfterEndLocation)
CGContextRestoreGState(currentContext)
}
以及如何画圆弧
func drawArc(color: UIColor, x: CGFloat, y: CGFloat, radius: CGFloat, startAngle: CGFloat, endAngle: CGFloat, lineWidth: CGFloat, clockwise: Int32) {
let context = UIGraphicsGetCurrentContext()
CGContextSetLineWidth(context, lineWidth)
CGContextSetStrokeColorWithColor(context,
color.CGColor)
CGContextAddArc(context, x, y, radius, startAngle, endAngle, clockwise)
CGContextStrokePath(context)
}
使用渐变,占据了整个视图。我不确定如何将渐变限制在特定区域,所以我创建了UIView 的子类,修改了框架并使用了渐变代码(第一个 sn-p)。
对于弧,我使用了第二个 sn-p。我在想我可以画一条弧线,然后在弧线的末端画一个圆,以圆润的弧度。我怎样才能做到这一点并在弧形上绘制渐变?
请忽略紫色标记。第一张图片是我指定的渐变弧的开始,第二张是渐变弧的结束,在开始弧的下方和左侧。
如何在 Swift 中使用 Core Graphics 进行绘制?
【问题讨论】:
标签: swift core-graphics gradient