JJ_iOS/JJUNGTABLE/Common/Modifier/SwiftUI_Modifier.swift
2024-06-26 12:38:42 +09:00

140 lines
3.7 KiB
Swift

//
// SwiftUI_Modifier.swift
// PersonalHealthDiary
//
// Created by Sean Kim on 2/20/24.
//
import SwiftUI
extension View {
func makeSystemButton(_ systemName: String, text: String = "",color: Color = .black, img:CGFloat = 40,size: CGFloat = 20) -> some View {
modifier(BottomModifier(systemName: systemName,color: color,text: text, fontSize: size, imgSize: img))
}
func fullPage(_ backColor: Color) -> some View {
self
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(backColor)
}
func font(_ type: FontType)-> some View {
switch type {
case .Title:
return AnyView(self.modifier(TitleFont()))
case .Content:
return AnyView(self.modifier(ContentFont()))
case .Small:
return AnyView(self.modifier(SmallFont()))
}
}
}
#if canImport(UIKit)
extension View {
func hideKeyboard() {
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
}
}
#endif
struct BottomModifier: ViewModifier {
var systemName: String
var color: Color
var text: String
var fontSize: CGFloat
var imgSize: CGFloat
func body(content: Content) -> some View {
VStack {
Image(systemName: systemName)
.resizable().aspectRatio(contentMode: .fill)
.tint(color)
.frame(width: imgSize ,height: imgSize)
.padding(.init(top: 0, leading: 10, bottom: 0, trailing: 10))
if text != "" {
Text(text)
.tint(color)
.font(.system(size: fontSize))
.padding(.init(top: 0, leading: 0, bottom: 5, trailing: 0))
}
}
}
}
struct MenuButtonBack: ViewModifier {
func body(content: Content) -> some View {
content
.font(.nps(size: 24))
.tint(.brand)
.frame(width: 40, height: 40, alignment: .center)
.background{
RoundedRectangle(cornerRadius: 10)
.strokeBorder(.brand,
style: StrokeStyle(lineWidth: 2))
}
}
}
struct TitleFont: ViewModifier {
func body(content: Content) -> some View {
content
.font(.nps(font: .bold, size: 32))
.minimumScaleFactor(0.1)
.tint(.brand)
.frame(maxHeight: 32, alignment: .leading)
}
}
// Title 40%
struct ContentFont: ViewModifier {
func body(content: Content) -> some View {
content
.font(.nps(size: 20))
.minimumScaleFactor(0.1)
.tint(.brand)
.frame(maxHeight: 20, alignment: .leading)
}
}
// Content 30%
struct SmallFont: ViewModifier {
func body(content: Content) -> some View {
content
.font(.nps(size: 14))
.minimumScaleFactor(0.1)
.tint(.brand)
.frame(maxHeight: 14, alignment: .leading)
}
}
struct AlignmentView: ViewModifier {
enum AlignmentType {
case leading
case trailing
case top
case bottom
}
var type: AlignmentType
func body(content: Content) -> some View {
if type == .leading || type == .trailing {
HStack(spacing: 0) {
if type == .trailing { Spacer() }
content
if type == .leading { Spacer() }
}
}
else {
VStack(spacing: 0) {
if type == .bottom { Spacer() }
content
if type == .top { Spacer() }
}
}
}
}