Untitled
unknown
plain_text
2 years ago
3.9 kB
14
Indexable
ContentView:
import SwiftUI
struct ContentView: View {
@State private var selectedShapeIndex: Int = 0
@State private var fillColor = Color.blue
@State private var widthText = ""
@State private var heightText = ""
@State private var showBorder = false
var body: some View {
VStack {
VStack {
HStack{
ShapePickerView(selectedShapeIndex: $selectedShapeIndex, options: ShapeData.options)
Spacer()
ColorPicker("", selection: $fillColor)
Spacer()
}
HStack{
Text("Szerokość: ")
TextField("Wprowadź szerokość", text: $widthText)
.textFieldStyle(RoundedBorderTextFieldStyle())
}
.padding()
.padding(.bottom, -20)
HStack{
Text("Wysokość: ")
TextField("Wprowadź wysokość", text: $heightText)
.textFieldStyle(RoundedBorderTextFieldStyle())
}
.padding()
Toggle("Wyświetl ramkę", isOn: $showBorder)
.padding()
}
.border(Color.black)
.padding()
ShapeDrawingView(shapeOption: ShapeData.options[selectedShapeIndex], fillColor: fillColor, width: ShapeData.stringToCGFloat(widthText), height: ShapeData.stringToCGFloat(heightText), showBorder: showBorder)
}
}
}
#Preview {
ContentView()
}
ShapeDrawingView:
import SwiftUI
struct ShapeDrawingView: View {
let shapeOption: ShapeOption
let fillColor: Color
let width: CGFloat
let height: CGFloat
let showBorder: Bool
var body: some View {
ZStack {
if showBorder {
Rectangle()
.fill(Color.white)
.stroke(Color.black, lineWidth: 3)
.frame(width: shapeOption.name == "Kolo" ? min(width, height) : width, height: shapeOption.name == "Kolo" ? min(width, height) : height)
}
if shapeOption.name == "Kolo" {
Circle()
.fill(fillColor)
.frame(width: min(width, height), height: min(width, height))
} else if shapeOption.name == "Elipsa" {
Ellipse()
.fill(fillColor)
.frame(width: width, height: height)
} else if shapeOption.name == "Kwadrat" {
Rectangle()
.fill(fillColor)
.frame(width: width, height: height)
}
}
}
}
ShapePickerView:
import SwiftUI
struct ShapePickerView: View {
@Binding var selectedShapeIndex: Int
var options: [ShapeOption]
var body: some View {
Picker("Select a shape", selection: $selectedShapeIndex) {
ForEach(options.indices, id: \.self) { index in
HStack {
Text(options[index].name)
Image(systemName: options[index].iconName)
}
.tag(index)
}
}
}
}
ShapeModel
import Foundation
struct ShapeOption {
let name: String
let iconName: String
let id: Int
}
struct ShapeData {
static let options: [ShapeOption] = [
ShapeOption(name: "Kolo", iconName: "circle", id: 0),
ShapeOption(name: "Elipsa", iconName: "oval", id: 1),
ShapeOption(name: "Kwadrat", iconName: "square", id: 2)
]
static func stringToCGFloat(_ value: String) -> CGFloat {
if let floatValue = Float(value) {
return CGFloat(floatValue)
} else {
return 0
}
}
}
Editor is loading...
Leave a Comment