forked from AcaMate/AcaMate_iOS
55 lines
1.8 KiB
Swift
55 lines
1.8 KiB
Swift
//
|
|
// ButtonView.swift
|
|
// AcaMate
|
|
//
|
|
// Created by TAnine on 2/4/25.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
|
|
|
|
struct CircleBtnView: View {
|
|
@ObservedObject var vm: ButtonViewModel
|
|
let id: UUID
|
|
|
|
var body: some View {
|
|
if let state = vm.btnStates[id] {
|
|
ZStack {
|
|
if state.isReverse {
|
|
Circle()
|
|
.foregroundStyle(state.backColor)
|
|
.frame(width: state.width, height: state.height)
|
|
.innerShadow(shape: Circle(), color: Color(.Text.black).opacity(0.75), blur: 8, x: 0, y: 4)
|
|
} else {
|
|
Circle()
|
|
.foregroundStyle(state.backColor)
|
|
.frame(width: state.width, height: state.height)
|
|
.shadow(color: Color(.Text.black).opacity(0.75), radius: 8, x: 4, y: 8)
|
|
}
|
|
VStack(alignment: .center, spacing: 0) {
|
|
if let image = state.image {
|
|
image
|
|
.resizable()
|
|
.renderingMode(.template)
|
|
.foregroundStyle(state.foreColor)
|
|
.frame(width: state.width/2, height: state.height/2)
|
|
}
|
|
if let title = state.text, let font = state.font {
|
|
Text("\(title)")
|
|
.font(font)
|
|
.foregroundStyle(state.foreColor)
|
|
.multilineStyle()
|
|
}
|
|
}
|
|
}
|
|
.frame(width: state.width, height: state.height)
|
|
.onTapGesture {
|
|
endTextEditing()
|
|
guard let action = state.action else {return}
|
|
action()
|
|
}
|
|
}
|
|
}
|
|
}
|