AcaMate_iOS/AcaMate/5. Modifier/View.swift
2025-02-04 18:03:47 +09:00

83 lines
2.6 KiB
Swift

//
// View.swift
// AcaMate
//
// Created by Sean Kim on 12/1/24.
//
import SwiftUI
import Combine
struct NetworkModifier: ViewModifier {
@ObservedObject private var networkMonitor = NetworkMonitor.shared
@EnvironmentObject var alertController: AlertController
func body(content: Content) -> some View {
content
.onChange(of: networkMonitor.isConnected) { _ , new in
if !new {
alertController.alertData = SetAlertData().setErrorNetwork()
alertController.showAlert.toggle()
}
}
}
}
struct AlertModifier: ViewModifier {
@EnvironmentObject var controller: AlertController
func body(content: Content) -> some View {
content
.alert(controller.alertData.title,
isPresented: $controller.showAlert,
presenting: $controller.alertData) { data in
let btnCount = data.button.count
ForEach(0 ..< btnCount, id: \.self) { index in
let btn = data.wrappedValue.button[index]
Button(role: btn.role) {
if let function = btn.function { function() }
} label: {
Text("\(btn.name)")
}
}
} message: { data in
Text("\(data.body.wrappedValue)")
}
}
}
extension View {
/// View
func fullDrawView(_ backColor: Color) -> some View {
return self
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(backColor)
}
func setAlert() -> some View {
self.modifier(AlertModifier())
}
func setNetwork() -> some View {
self.modifier(NetworkModifier())
}
func endTextEditing() {
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
}
func setNavigaion() -> some View {
self
.navigationBarBackButtonHidden(true)
.toolbar(.hidden, for: .navigationBar)
}
func innerShadow<S: Shape> (shape: S, color: Color, lineWidth: CGFloat = 6, blur: CGFloat, x: CGFloat, y: CGFloat) -> some View {
return self.overlay {
shape
.stroke(color, lineWidth: lineWidth)
.offset(x: x, y: y)
.blur(radius: blur)
.mask(shape.fill(LinearGradient(gradient: Gradient(colors: [.black, .clear]), startPoint: .topLeading, endPoint: .bottomTrailing)))
}
}
}