labik 4 zadanie 2

kodzik dla Adiego
 avatar
unknown
swift
a year ago
3.7 kB
7
Indexable
//
//  ContentView.swift
//

import SwiftUI

struct ContentView: View {
    @StateObject var dataForView = DataForView()
    
    @State var fillColor = Color.green
    @State var height = ""
    @State var width = ""
    @State var border = false
    
    var body: some View {
        let floatWidth = dataForView.toCGFloat(width)
        let floatHeight = dataForView.toCGFloat(height)
    
        VStack {
            VStack {
                HStack {
                    FigurePickerView(
                        selectedFigure: $dataForView.selectedFigure,
                        figures: dataForView.figures)
                    ColorPicker("Wybierz kolor", selection: $fillColor)
                }
                HStack {
                    Text("Wysokosc: ")
                    
                    TextField("Wysokosc", text: $height)
                }
                HStack {
                    Text("Szerokosc: ")
                    TextField("Szerokosc", text: $width)
                }
                HStack {
                    Toggle("Ramka", isOn: $border)
                }
            }
            .padding()
            .border(/*@START_MENU_TOKEN@*/Color.black/*@END_MENU_TOKEN@*/)
            
            if floatWidth > 0 && floatHeight > 0 {
                switch $dataForView.selectedFigure.id {
                case 1:
                    Rectangle()
                        .frame(width: floatWidth, height: floatHeight)
                        .foregroundColor(fillColor)
                        .border(border ? .black : .clear)
                case 2:
                    Circle()
                        .frame(width: floatWidth, height: floatHeight)
                        .foregroundColor(fillColor)
                        .border(border ? .black : .clear)
                case 3:
                    Ellipse()
                        .frame(width: floatWidth, height: floatHeight)
                        .foregroundColor(fillColor)
                        .border(border ? .black : .clear)
                default:
                    Rectangle()
                }
            } else if (!width.isEmpty && !height.isEmpty) {
                Text("Nieprawidlowe dane")
            }
            Spacer()
        }
        .padding()
    }
}

#Preview {
    ContentView()
}



//
//  FigurePickerElement.swift
//


import Foundation


struct FigurePickerElement: Hashable, Identifiable {
    let name: String
    let icon: String
    let id: Int
}


//
//  FigurePickerView.swift



import SwiftUI

struct FigurePickerView: View {
    @Binding var selectedFigure: FigurePickerElement
    let figures: [FigurePickerElement]
    
    var body: some View {
        Picker(selection: $selectedFigure, 
               label: Text("Wybierz figure"),
               content: {
            ForEach(figures) { figure in
                HStack {
                    Image(systemName: figure.icon)
                    Text(figure.name)
                }
                .tag(figure)
            }
        })
    }
}



//
//  DataForView.swift
//


import Foundation

class DataForView: ObservableObject {
    let figures: [FigurePickerElement];
    @Published var selectedFigure : FigurePickerElement
    
    init() {
        self.figures = [
            FigurePickerElement(name: "Kwadrat", icon: "square", id: 1),
            FigurePickerElement(name: "Okrag", icon: "circle", id: 2),
            FigurePickerElement(name: "Elipsa", icon: "oval", id: 3)
        ]
        
        self.selectedFigure = figures[0]
    }
    
    func toCGFloat(_ value: String) -> CGFloat {
        if let doubleValue = Double(value) {
            return CGFloat(doubleValue)
        }
        return 0
    }

Editor is loading...
Leave a Comment