WidgetBobble.swift 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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: 78)
  36. }
  37. }
  38. struct TriangleWidget: Shape {
  39. func path(in rect: CGRect) -> Path {
  40. var path = Path()
  41. let cornerRadius: CGFloat = 2
  42. path.move(to: CGPoint(x: rect.midX, y: rect.minY))
  43. path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY - cornerRadius))
  44. path.addQuadCurve(to: CGPoint(x: rect.minX, y: rect.maxY - cornerRadius), control: CGPoint(x: rect.midX, y: rect.maxY))
  45. path.closeSubpath()
  46. return path
  47. }
  48. }