Created
February 6, 2023 03:56
-
-
Save DarrenHurst/5332dbb46dc0627bef15598b79938784 to your computer and use it in GitHub Desktop.
Burger Builder Animated
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// CartView.swift | |
// RTSPStreamer | |
// | |
// Created by Darren Hurst on 2023-02-05. | |
// | |
import Foundation | |
import SwiftUI | |
struct CartView: View { | |
let burgers: [BurgerBuilder] = [HamburgerBuilder(), CheeseburgerBuilder(), BaconburgerBuilder()] | |
@State var burger: Burger = Burger(burger: BaconburgerBuilder()) | |
var body: some View { | |
// returns View Type | |
ScrollView(.vertical){ | |
LazyVStack { | |
AnyView( self.showBurgerOptions() ) | |
// AnyView( burger.showBurgerView() ) | |
}.onAppear() { | |
burger.tomatoes = false | |
}.standard().frame(alignment:.top) | |
//.offset(y:-60) | |
}.standard() | |
} | |
/* Binding func */ | |
func showBurgerOptions() -> any View { | |
@State var scale = 0.9 | |
return VStack { | |
Text("Burger Type: \($burger.name.wrappedValue)").font(.LargeBoldFont).offset(y:50) | |
ZStack { | |
Image("BunTop") | |
.offset(y:burger.tomatoes ? 80: 90) | |
//.animation(runBounce(), value: burger.tomatoes) | |
.animation(runSpring(), value: burger.tomatoes) | |
}.zIndex(2).offset(y:30) | |
ZStack { | |
Circle().shadow(radius: 10) | |
.frame(width: 240,height:240).offset(y:-40) | |
Image("Tomatoe").zIndex(5) | |
.offset(y:burger.tomatoes ? -37: -55).animation(.easeInOut, value: burger.tomatoes) | |
.opacity(burger.tomatoes ? 0.9: 0).animation(.easeInOut, value: burger.tomatoes).shadow(radius: 3) | |
Image("bacon").zIndex(4).offset(y:-35).shadow(radius: 3) | |
Image("cheese").zIndex(3).offset(y:-25).shadow(radius: 3) | |
Image("patties").zIndex(1).offset(y:-15).shadow(radius: 3) | |
Image("BunBottom") | |
} | |
VStack { | |
LazyVStack { | |
Toggle("Tomatoes: ", isOn: $burger.tomatoes).shadow(radius: 3).tint(.blue) | |
Toggle("Onions: ", isOn: $burger.onions).shadow(radius: 3).tint(.blue) | |
Toggle("Lettuce: ", isOn: $burger.lettuce).shadow(radius: 3).tint(.blue) | |
Toggle(isOn: $burger.ketchup){ | |
Text("Ketchup") | |
}.tint(.blue).shadow(radius: 3) | |
}.font(.Large).padding(30) | |
.overlay( | |
RoundedRectangle(cornerRadius: 14) | |
.stroke(Color.DarkGray, lineWidth: 2) | |
).padding(10).shadow(radius: 3) | |
} | |
} | |
} | |
} | |
struct PreviewBurger : PreviewProvider { | |
let myBurger: Burger = Burger(burger: BaconburgerBuilder()) | |
static var previews: some View { | |
CartView() | |
} | |
} | |
protocol BurgerBuilder { | |
var name: String { get set} | |
var lettuce: Bool{ get set } | |
var tomatoes: Bool { get set } | |
var onions: Bool { get set } | |
var patties : Int { get set } | |
var ketchup : Bool { get set } | |
var mustard : Bool { get set } | |
var bacon: Bool { get set } | |
var cheese: Bool { get set } | |
} | |
struct Burger: BurgerBuilder { | |
var name: String | |
var lettuce: Bool | |
var tomatoes: Bool | |
var onions: Bool | |
var patties: Int | |
var ketchup: Bool | |
var mustard: Bool | |
var bacon: Bool | |
var cheese: Bool | |
init(burger: BurgerBuilder) { | |
self.name = burger.name | |
self.lettuce = burger.lettuce | |
self.tomatoes = burger.tomatoes | |
self.onions = burger.onions | |
self.patties = burger.patties | |
self.ketchup = burger.ketchup | |
self.mustard = burger.mustard | |
self.bacon = burger.bacon | |
self.cheese = burger.cheese | |
} | |
func showBurgerView() -> any View { | |
return | |
VStack { | |
Text("\(name)") | |
Text("Tomatoes: \(String(tomatoes))") | |
Text("Onions: \(String(onions))") | |
Text("Lettuce: \(String(lettuce))") | |
Text("Ketchup: \(String(ketchup))") | |
} | |
} | |
} | |
struct HamburgerBuilder: BurgerBuilder { | |
var name: String = "Basic Burger" | |
var lettuce: Bool = true | |
var tomatoes: Bool = true | |
var onions: Bool = true | |
var patties: Int = 1 | |
var ketchup: Bool = true | |
var mustard: Bool = true | |
var bacon: Bool = false | |
var cheese: Bool = false | |
} | |
struct CheeseburgerBuilder: BurgerBuilder { | |
var name: String = "Cheese Burger" | |
var lettuce: Bool = true | |
var tomatoes: Bool = true | |
var onions: Bool = true | |
var patties: Int = 1 | |
var ketchup: Bool = true | |
var mustard: Bool = true | |
var bacon: Bool = false | |
var cheese: Bool = true | |
} | |
struct BaconburgerBuilder: BurgerBuilder { | |
var name: String = "Bacon Burger" | |
var lettuce: Bool = true | |
var tomatoes: Bool = true | |
var onions: Bool = true | |
var patties: Int = 1 | |
var ketchup: Bool = true | |
var mustard: Bool = true | |
var bacon: Bool = false | |
var cheese: Bool = true | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Screen.Recording.2023-02-05.at.10.48.22.PM.mov