WidgetBobble 2.swift 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. // let colorBackground: Color = colorScheme == .dark ? Color(
  23. // red: 0.05490196078,
  24. // green: 0.05490196078,
  25. // blue: 0.05490196078
  26. // ) : .white
  27. Circle()
  28. .stroke(gradient, lineWidth: 10)
  29. .background(Circle().fill(.clear))
  30. .frame(width: 130, height: 130)
  31. }
  32. }
  33. struct TriangleShapeWidget: View {
  34. let color: Color
  35. var body: some View {
  36. TriangleWidget()
  37. .fill(color)
  38. .frame(width: 35, height: 35)
  39. .rotationEffect(.degrees(90))
  40. .offset(x: 78)
  41. }
  42. }
  43. struct TriangleWidget: Shape {
  44. func path(in rect: CGRect) -> Path {
  45. var path = Path()
  46. let cornerRadius: CGFloat = 2
  47. path.move(to: CGPoint(x: rect.midX, y: rect.minY))
  48. path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY - cornerRadius))
  49. path.addQuadCurve(to: CGPoint(x: rect.minX, y: rect.maxY - cornerRadius), control: CGPoint(x: rect.midX, y: rect.maxY))
  50. path.closeSubpath()
  51. return path
  52. }
  53. }