Deep_Lee
[SwiftUI] Onboarding ํ™”๋ฉด ๋งŒ๋“ค๊ธฐ
๐ŸŽ iOS/SwiftUI 2024. 8. 10. 15:50

๐ŸŽ Onboarding ์ด๋ฒˆ MC3 ํ”„๋กœ์ ํŠธ์—์„œ ์˜จ๋ณด๋”ฉํ™”๋ฉด ๊ตฌํ˜„์„ ๋งก์•˜์–ด์„œ,์˜›๋‚ ์— ์˜จ๋ณด๋”ฉ์„ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” ๊ทธ๋ƒฅ ๋˜๋Š”๋Œ€๋กœ ๋ง‰ ๊ตฌํ˜„์„ ํ•ด์„œ ์ •๋ฆฌ๊ฐ€ ์•ˆ๋˜์—ˆ์ง€๋งŒ์ด๋ฒˆ์— ๋‹ค์‹œํ•˜๋Š” ๊น€์— ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค.  1. ์žฌ์‹œ์ž‘ ์—ฌ๋ถ€๋ฅผ ์ €์žฅํ•  ๋กœ์ปฌ ๋ฐ์ดํ„ฐ ๋ณ€์ˆ˜ + ์ตœ์ดˆ ์‹คํ–‰์‹œ ์˜จ๋ณด๋”ฉ ํ™”๋ฉด ๋„์šฐ๊ฒŒ ํ•˜๋Š” ์ž‘์—…์•ฑ์ด ์žฌ์‹œ์ž‘ ์—ฌ๋ถ€๋ฅผ ๊ธฐ์–ตํ•˜๊ธฐ ์œ„ํ•ด์„ , ๊ธฐ๊ธฐ์— ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.@AppStorage๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.์ตœ์ดˆ ๊ตฌ๋™์‹œ์—๋งŒ ํ•ด๋‹น ๋ฐ์ดํ„ฐ ๊ฐ’์ด true์ด๋ฏ€๋กœ ์˜จ๋ณด๋”ฉํ™”๋ฉด์ด .fullScreen์œผ๋กœ ๋„์›Œ์ง€๊ณ , ์ดํ›„์— false๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด์„œ์žฌ์‹คํ–‰์‹œ์—๋„ ๋œจ์ง€ ์•Š๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.import SwiftUIstruct ContentView: View { // ์˜จ๋ณด๋”ฉ ํ™”๋ฉด์„ ์•ฑ ์ตœ์ดˆ ์‹คํ–‰๋•Œ ํ•œ๋ฒˆ๋งŒ ๋„์šฐ๋„๋ก ํ•˜๋Š” ๋กœ์ปฌ ๋ณ€์ˆ˜ @AppStorage("..

article thumbnail
[WatchOS][SwiftUI] NavigationLink - PlainButtonStyle()
๐ŸŽ iOS/WatchOS 2024. 7. 7. 16:28

๐Ÿ“š WatchOS - SwiftUINavigationLink - PlainButtonStyle๋กœ ๋ฒ„ํŠผ์˜ ์‹œ๊ฐ์  ์š”์†Œ ์ ์šฉ X  PlainButtonStyle()๋ชจ๋“  OS์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ„ํŠผ ์Šคํƒ€์ผ๋กœ, ์œ ํœด ์ƒํƒœ(IDLE)์—์„œ๋Š” ๋ฒ„ํŠผ์˜ ์ฝ˜ํ…์ธ ์— ์–ด๋– ํ•œ ์‹œ์ž‘์  ์š”์†Œ๋„ ์ ์šฉํ•˜์ง€ ์•Š์Œ  WatchOS๋ฅผ ๊ฐœ๋ฐœํ•˜๋˜์ค‘VGrid์•ˆ์— ForEach๋ฌธ์œผ๋กœ ๋ฐ์ดํ„ฐ๋“ค์˜ List๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ ,๊ฐ Cell๋“ค์„ NavigationLink๋กœ ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๋Š” ์ž‘์—…์„ ํ–ˆ๋‹ค. ๋จผ์ € CellView๋ฅผ ๊ทธ๋ฆฌ๋Š” ์ž‘์—…์„ ๋จผ์ € ํ–ˆ๊ณ , ์ดํ›„ NavigationLink๋กœ DetailView๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ์ˆ˜์ •ํ•˜์˜€๋‹ค.import SwiftUIstruct WatchMarkerListView: View { let tempData = [..

article thumbnail
[SwiftUI] Custom Alert View
๐ŸŽ iOS/SwiftUI 2024. 6. 16. 21:37

โœ… Custom Alert   ํ•ด์ปคํ†ค์„ ํ•  ๋•Œ,์ด๋Ÿฐ ๋ทฐ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผํ–ˆ์—ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ธฐ์กด์˜ Alert๋ฅผ Customํ•˜๋ฉด ๋‚˜์˜ค๋Š”๊ฒƒ์ด๋‹ค.  import SwiftUIstruct ContentView: View { @State private var isAlertPresented = false var body: some View { ZStack { VStack { Button("Show Custom Alert") { isAlertPresented.toggle() } .padding() ..

article thumbnail
[SwiftUI] View -> Flip ๊ธฐ๋Šฅ
๐ŸŽ iOS/SwiftUI 2024. 6. 16. 20:28

โœ… ๋ทฐ๋ฅผ ์ „ํ™˜์‹œํ‚ค๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์ธ Flip ๊ธฐ๋Šฅ   1. MainViewimport SwiftUIstruct ContentView: View { @State var isFlipped = false var body: some View { VStack(spacing: 0) { ZStack { if isFlipped { FrontView() } else { BackView() } } .scaleEffect(x: isFlipped ? -1 : 1) .f..

article thumbnail
[SwiftUI] SwiftData
๐ŸŽ iOS/SwiftUI 2024. 4. 22. 20:00

โœ… SwiftData Why is SwiftData ? - SwiftData๋Š” ์™œ ๋งŒ๋“ค์–ด์กŒ์„๊นŒ์š” ? CoreData์™€ Realm์˜ ์žฅ์ ์„ ํ•ฉ์นœ๋“ฏํ•œ ๋Š๋‚Œ What is SwiftData ? ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ๋ฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ํ”„๋ ˆ์ž„์›Œํฌ ์ฆ‰, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ทธ ์ž์ฒด๋Š” ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ. ์™ธ๋ถ€ ํŒŒ์ผ ํ˜•์‹ ์—†์ด ์ „์ ์œผ๋กœ ์ฝ”๋“œ์— ์ง‘์ค‘ํ•˜๊ณ  Swift์˜ ์ƒˆ๋กœ์šด ๋งคํฌ๋กœ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ• ํ•œ API ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋Š” ๊ตฌ์„ฑ์š”์†Œ @ . โœ… @Model ํด๋ž˜์Šค๋ฅผ persistent ๋ชจ๋ธ์ด๋ผ๋Š” ํƒ€์ž…์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์—ญํ• . ํด๋ž˜์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์—”ํ‹ฐํ‹ฐ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๊ฒŒ๋˜๊ณ , ๋˜ persistent ๋ชจ๋ธ์ด๋ผ๋Š” ํƒ€์ž…์œผ๋กœ ์•ฑํ•œํ…Œ ์ด์ œ ์ด๊ฑด ์Šคํ‚ค๋งˆ์•ผ ๋ผ๊ณ  ์•Œ๋ ค์ฃผ๊ฒŒ ๋œ๋‹ค. PersistentModel : AnyObject, Obersvable,..

article thumbnail
[SwiftUI] TextEditor BackgroundColor ์ ์šฉ
๐ŸŽ iOS/SwiftUI 2024. 4. 22. 10:27

TextEditor์˜ Background Color๋ฅผ ์ ์šฉํ•˜๋ ค๋ฉด .scrollContentBackground(.hidden)์œผ๋กœ ๊ธฐ๋ณธ ๋ฐฐ๊ฒฝ์„ ์ˆจ๊ธฐ๊ณ  .background(.clear)๋ฅผ ์ ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์ด ์ƒํƒœ์—์„œ, TextEditor(text: $memoContent) //.scrollContentBackground(.hidden) .background(.red) .padding() .background(.red) .cornerRadius(10) .lineSpacing(10) ์ฃผ์„์„ ์ง€์›Œ์ฃผ๋ฉด, TextEditor(text: $memoContent) .scrollContentBackground(.hidden) .background(.red) .padding() .background(.red) .corne..

article thumbnail
[SwiftUI] NavigationStack
๐ŸŽ iOS/SwiftUI 2024. 4. 4. 22:06

โœ… ๊ธฐ์กด์˜ ๋ฐฉ์‹ : NavigationView ๊ธฐ์กด์—๋Š” NaivgationView์™€ NavigationLink๋ฅผ ํ†ตํ•ด ํƒ€์ดํ‹€๊ณผ ๋ทฐ๋ฅผ ๋„ฃ์–ด์ฃผ๋Š” ์‹์œผ๋กœ ์‚ฌ์šฉ์ด ๋๋‹ค. var body: some View{ NavigationView { NavigationLink { ๋ทฐ(color: .red, order: 1) } label: { Text("ํƒ€์ดํ‹€") } } } ๐Ÿ’ก Stack์œผ๋กœ ๋ฐ”๋€Œ๋ฉด์„œ NavigationView์˜ ์–ด๋–ค ๋‹จ์ ์„ ๊ทน๋ณตํ–ˆ๋Š”์ง€ ? NavigationView์˜ ์ฃผ์š” ๋‹จ์  ์ค‘ ํ•˜๋‚˜๋Š” SwiftUI์—์„œ ๋งค์šฐ ๊ฐ„๋‹จํ•œ ์•ฑ์˜ ๊ฒฝ์šฐ์—๋„ ๋ชจ๋“  ๋ทฐ๊ฐ€ ๋‚ด๋น„๊ฒŒ์ด์…˜ ์Šคํƒ์— ์ž๋™์œผ๋กœ ํ‘ธ์‹œ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋˜ํ•œ, NavigationView๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ง‰๋Œ€์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ๊ธฐ๋Šฅ์„..

[SwiftUI] Property Wrapper โ‘ก
๐ŸŽ iOS/SwiftUI 2024. 3. 27. 19:30

โœ… Property Wrapper ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ์‹ธ ํŠน๋ณ„ํ•œ ํƒ€์ž…์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด๋ณด๋ฉด, ์–ด๋–ค ๋กœ์ง๋“ค์„ ๋งค๋ฒˆ ๋™์ผํ•˜๊ฒŒ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š๊ณ  Property Wrapper๋กœ ๋งŒ๋“  ํƒ€์ž…์œผ๋กœ ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ ์–ธํ•ด ๋™์ผ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค. โœ… Property Wrapper๊ฐ€ ์—†๋‹ค๋ฉด ? struct House { private var width = 0 var size: Int { get { return width } set { width = pow(newValue, 20) } } } struct KoreaHouse { private var _appartment = House() private var _villa = House() var appartmentSize: Int { get { return _appar..