WidgetBobble.swift 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import SwiftUI
  2. struct WidgetBobble: View {
  3. @Environment(\.colorScheme) var colorScheme
  4. let gradient: AngularGradient
  5. let color: Color
  6. var body: some View {
  7. HStack(alignment: .center) {
  8. ZStack {
  9. Group {
  10. CircleShapeWidget(gradient: gradient)
  11. TriangleShapeWidget(color: color)
  12. }
  13. CircleShapeWidget(gradient: gradient)
  14. }
  15. }
  16. }
  17. }
  18. struct CircleShapeWidget: View {
  19. @Environment(\.colorScheme) var colorScheme
  20. let gradient: AngularGradient
  21. var body: some View {
  22. Circle()
  23. .stroke(gradient, lineWidth: 10)
  24. .background(Circle().fill(.clear))
  25. .frame(width: 130, height: 130)
  26. }
  27. }
  28. struct TriangleShapeWidget: View {
  29. let color: Color
  30. var body: some View {
  31. TriangleWidget()
  32. .fill(color)
  33. .frame(width: 35, height: 35)
  34. .rotationEffect(.degrees(90))
  35. .offset(x: 88)
  36. }
  37. }
  38. struct TriangleWidget: Shape {
  39. func path(in rect: CGRect) -> Path {
  40. var path = Path()
  41. path.move(to: CGPoint(x: rect.midX, y: rect.minY + 15))
  42. path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY))
  43. path.addQuadCurve(to: CGPoint(x: rect.minX, y: rect.maxY), control: CGPoint(x: rect.midX, y: rect.midY + 10))
  44. path.closeSubpath()
  45. return path
  46. }
  47. }