Guest User

Untitled

a guest
Nov 17th, 2022
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 2.47 KB | Source Code | 0 0
  1.  
  2. import SwiftUI
  3.  
  4. struct ColorCyclingRectangle: View {
  5.     var amount = 0.0
  6.     var steps = 100
  7.     var gradientStartX = 0.5
  8.     var gradientStartY = 0.0
  9.    
  10.     var gradientEndX = 0.5
  11.     var gradientEndY = 1.0
  12.  
  13.     var body: some View {
  14.         ZStack {
  15.             ForEach(0..<steps) { value in
  16.                 Rectangle()
  17.                     .inset(by: Double(value))
  18.                     .strokeBorder(
  19.                         LinearGradient(
  20.                             gradient: Gradient(colors: [
  21.                                 color(for: value, brightness: 1),
  22.                                 color(for: value, brightness: 0.5)
  23.                             ]),
  24.                             startPoint: UnitPoint(x:gradientStartX, y: gradientStartY),
  25.                             endPoint: UnitPoint(x: gradientEndX, y: gradientEndY)
  26.                         ),
  27.                         lineWidth: 2
  28.                     )
  29.             }
  30.         }
  31.         .drawingGroup()
  32.     }
  33.  
  34.     func color(for value: Int, brightness: Double) -> Color {
  35.         var targetHue = Double(value) / Double(steps) + amount
  36.  
  37.         if targetHue > 1 {
  38.             targetHue -= 1
  39.         }
  40.  
  41.         return Color(hue: targetHue, saturation: 1, brightness: brightness)
  42.     }
  43. }
  44.  
  45. struct ContentView: View {
  46.     @State private var colorCycle = 0.0
  47.     @State private var gradientStartX = 0.5
  48.     @State private var gradientStartY = 0.0
  49.     @State private var gradientEndX = 0.5
  50.     @State private var gradientEndY = 1.0
  51.  
  52.     var body: some View {
  53.         VStack {
  54.             ColorCyclingRectangle(amount: colorCycle, gradientStartX: gradientStartX, gradientStartY: gradientStartY, gradientEndX: gradientEndX, gradientEndY: gradientEndY)
  55.                 .frame(width: 300, height: 300)
  56.  
  57.             HStack {
  58.                 Text("Color")
  59.                 Slider(value: $colorCycle)
  60.             }
  61.             HStack {
  62.                 Text("StartX")
  63.                 Slider(value: $gradientStartX)
  64.             }
  65.             HStack {
  66.                 Text("StartY")
  67.                 Slider(value: $gradientStartY)
  68.             }
  69.             HStack {
  70.                 Text("End X")
  71.                 Slider(value: $gradientEndX)
  72.             }
  73.             HStack {
  74.                 Text("End Y")
  75.                 Slider(value: $gradientEndY)
  76.             }
  77.         }
  78.     }
  79. }
  80.  
  81. struct ContentView_Previews: PreviewProvider {
  82.     static var previews: some View {
  83.         ContentView()
  84.     }
  85. }
Advertisement
Add Comment
Please, Sign In to add comment