Skip to content

Instantly share code, notes, and snippets.

View Arrlindii's full-sized avatar

Arlind Aliu Arrlindii

View GitHub Profile
let spectrum = Gradient(colors: [Color.mintGreenColor, Color.darkMintColor])
let conic = AngularGradient(gradient: spectrum, center: .center, angle: .radians(getEndAngle().radians))
let ring = RingShape(startAngle: getStartAngle(), endAngle: getEndAngle(), ringWidth: ringWidth).fill(conic)
let ringHead = RingHead(endAngle: getEndAngle(), ringWidth: ringWidth).fill(Color.darkMintColor)
var animatableData: Double {
get {return endAngle.radians}
set {endAngle = Angle(radians: newValue)}
}
private struct RingHead: Shape {
var endAngle: Angle
let ringWidth: CGFloat
var animatableData: Double {
get {return endAngle.radians}
set {endAngle = Angle(radians: newValue)}
}
func path(in rect: CGRect) -> Path {
var body: some View {
let spectrum = Gradient(colors: [ Color.mintGreenColor, Color.darkMintColor])
let conic = AngularGradient(gradient: spectrum, center: .center, angle: .radians(getEndAngle().radians))
let ring = RingShape(startAngle: getStartAngle(), endAngle: getEndAngle(), ringWidth: ringWidth).fill(conic)
let ringHead = RingHead(endAngle: getEndAngle(), ringWidth: ringWidth).fill(Color.darkMintColor)
return ring.overlay(ringHead)
}
private struct ForgroundRingView: View {
var percentage: Double = 0.5
let ringWidth: CGFloat
var body: some View {
let spectrum = Gradient(colors: [ Color.mintGreenColor, Color.darkMintColor])
let conic = AngularGradient(gradient: spectrum, center: .center, angle: .radians(getEndAngle().radians))
let ring = RingShape(startAngle: getStartAngle(), endAngle: getEndAngle(), ringWidth: ringWidth).fill(conic)
return ring
private struct RingShape: Shape {
var startAngle: Angle
var endAngle: Angle
let ringWidth: CGFloat
var animatableData: Double {
get {return endAngle.radians}
set {endAngle = Angle(radians: newValue)}
}
let spectrum = Gradient(colors: [Color.mintGreenColor, Color.darkMintColor])
let conic = AngularGradient(gradient: spectrum, center: .center, angle: .radians(getEndAngle().radians))
private var circleSize: CGFloat {
return (rect.width + (1-scale)*rect.width)/2
}
private var circleSize: CGFloat {
return rect.width/2
}
var animatableData: AnimatablePair<Double, CGFloat> {
get {return AnimatablePair(petalCount, scale)}
set {
petalCount = newValue.first
scale = newValue.second
}
}