Skip to content

Instantly share code, notes, and snippets.

@DarrenHurst
Created February 6, 2023 03:56
Show Gist options
  • Save DarrenHurst/5332dbb46dc0627bef15598b79938784 to your computer and use it in GitHub Desktop.
Save DarrenHurst/5332dbb46dc0627bef15598b79938784 to your computer and use it in GitHub Desktop.
Burger Builder Animated
//
// 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
}
@DarrenHurst
Copy link
Author

Screenshot 2023-02-05 at 10 49 33 PM

@DarrenHurst
Copy link
Author

Screen.Recording.2023-02-05.at.10.48.22.PM.mov

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment