Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- override func draw(_ rect: CGRect) {
- let context: CGContext = UIGraphicsGetCurrentContext()!
- drawLinearGradient(context)
- drawCenterCircle(context)
- let circle: CAShapeLayer = drawStroke()
- let pathAnimation = CABasicAnimation(keyPath: "strokeEnd")
- pathAnimation.duration = percentage
- pathAnimation.toValue = percentage
- pathAnimation.isRemovedOnCompletion = rendered ? false : (percentageLabel > 20 ? false : true)
- pathAnimation.isAdditive = true
- pathAnimation.fillMode = kCAFillModeForwards
- circle.add(pathAnimation, forKey: "strokeEnd")
- }
- private func drawLinearGradient(_ context: CGContext) {
- let circlePoint: CGRect = CGRect(x: 0, y: 0,
- width: bounds.size.width, height: bounds.size.height)
- context.addEllipse(in: circlePoint)
- context.clip()
- let colorSpace: CGColorSpace = CGColorSpaceCreateDeviceRGB()
- let colorArray = [colors.0.cgColor, colors.1.cgColor]
- let colorLocations: [CGFloat] = [0.0, 1.0]
- let gradient = CGGradient(colorsSpace: colorSpace, colors: colorArray as CFArray, locations: colorLocations)
- let startPoint = CGPoint.zero
- let endPoint = CGPoint(x: 0, y: self.bounds.height)
- context.drawLinearGradient(gradient!,
- start: startPoint,
- end: endPoint,
- options: CGGradientDrawingOptions.drawsAfterEndLocation)
- }
- private func drawCenterCircle(_ context: CGContext) {
- let circlePoint: CGRect = CGRect(x: arcWidth, y: arcWidth,
- width: bounds.size.width-arcWidth*2,
- height: bounds.size.height-arcWidth*2)
- context.addEllipse(in: circlePoint)
- UIColor.white.setFill()
- context.fillPath()
- }
- private func drawStroke() -> CAShapeLayer {
- let circle = CAShapeLayer()
- self.layer.addSublayer(circle)
- return circle
- }
Add Comment
Please, Sign In to add comment