[SwiftUI] LifeCycle
ยท
๐ŸŽ Dev/SwiftUI
UIKit๊ณผ SwiftUI๋Š” ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ๋‹ค๋ฅด๋‹ค.SwiftUI๋กœ ๋ทฐ๋ฅผ ๊ทธ๋ฆฌ๊ณ  ๋กœ์ง์„ ์งœ๋‹ค๋ณด๋ฉด viewDidLoad์ฒ˜๋Ÿผ onAppear๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ๊ธฐ๋Œ€ํ•œ ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์•˜๋˜ ๊ฒฝํ—˜์ด ์žˆ์—ˆ๋‹ค. ๊ฒ€์ƒ‰ํ•ด๋ณด๋‹ˆ UIKit๊ณผ ๋‹ฌ๋ผ์ง„ ์ƒ๋ช…์ฃผ๊ธฐ delegate์™€ ์—ฐ๊ด€์ด ์žˆ์—ˆ์–ด์„œ, ๋‘ ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘ swiftUI์˜ ์ƒ๋ช… ์ฃผ๊ธฐ api๋ฅผ ์ •๋ฆฌํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ „๋ฐ˜์ ์ธ iOS ์•ฑ ์ƒ๋ช…์ฃผ๊ธฐ์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ํฌ์ŠคํŠธ์— ์ •๋ฆฌํ•œ ์ ์ด ์žˆ๋‹ค. https://calliek.tistory.com/28 [UIKit] ์•ฑ์˜ ์ƒ๋ช…์ฃผ๊ธฐโœ”๏ธŽ ์ƒ๋ช…์ฃผ๊ธฐ (Life Cycle) ์ƒ๋ช…์ฃผ๊ธฐ๋ž€, ์•ฑ์ด ์ตœ์ดˆ๋กœ ์‹คํ–‰๋˜๋Š” ์‹œ์ ๋ถ€ํ„ฐ ์ข…๋ฃŒ๋˜๋Š” ์‹œ์ ๊นŒ์ง€์˜ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋Ÿฐ ์•ฑ์˜ ์ƒํƒœ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€ ํ•˜๋ฉด, "the current state of your app ..
[SwiftUI] ObservableObject, ObservedObject, Published
ยท
๐ŸŽ Dev/SwiftUI
ํšŒ์‚ฌ์—์„œ SwiftUI๋กœ ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์ง€๋งŒ, ํšŒ์‚ฌ ํ”„๋กœ์ ํŠธ ๊ธฐ๋ฐ˜์ธ UIKit์˜ ๊ทธ๋Š˜์—์„œ ๋ฒ—์–ด๋‚˜์ง€ ๋ชป ํ•ด์„œ ์–ธ์ œ๋‚˜ ๋ฐ˜์ชฝ์งœ๋ฆฌ SwiftUI๋กœ ์ž‘์—…ํ•˜๋Š” ๊ธฐ๋ถ„์ด ๋“ค์—ˆ๋‹ค. Property Wrapper๋ฅผ ์ž‘์—… ์ดˆ๊ธฐ์— ํšŒ์‚ฌ ์ปจํ”Œ๋ฃจ์–ธ์Šค์— ์ •๋ฆฌํ•˜๊ณ , ๊ทธ ๊ธ€์„ ๋‹ค์‹œ ์ด ๋ธ”๋กœ๊ทธ์— ์ ๊ธฐ๋„ ํ–ˆ๋Š”๋ฐ ๊ทธ๋• ํšŒ์‚ฌ์—์„œ ๊ฒ€์ƒ‰ํ•ด๋„ ๋ญ๊ฐ€ ๋ญ”์ง€ ๋ชฐ๋ผ์„œ ์ •์˜๋ณด๋‹ค๋„ ๋œป์„ ์ฐพ์•„๋ณธ ๋Š๋‚Œ์ด ๊ฐ•ํ–ˆ๋‹ค. ์‹ค์ œ๋กœ ํšŒ์‚ฌ ํ”„๋กœ์ ํŠธ์—์„œ ํ•ด๋‹น wrapper๋“ค์„ ๋‹ค ํ™œ์šฉํ•˜์ง€ ๋ชป ํ•˜๊ธฐ๋„ ํ–ˆ๊ณ . ๊ทธ๋ž˜์„œ ๋‹ค์‹œ ์ฐจ๊ทผ์ฐจ๊ทผ ํ•˜๋‚˜์”ฉ ๊ฐ„๋‹จํžˆ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ์งœ๋ณด๋ฉฐ ๊ณต๋ถ€ํ•ด๋ณด๊ณ  ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค. ์ฐธ๊ณ ๋กœ, wrapper ์ •๋ฆฌํ–ˆ๋˜ ๊ฒŒ์‹œ๊ธ€์„ ์•„๋ž˜ ๋งํฌ์˜ ๊ธ€์ด๋‹ค. ๊ฑฐ์ฐฝํ•œ ์ด์ •๋ฆฌ๋ž€ ํƒ€์ดํ‹€๊ณผ ๋‹ฌ๋ฆฌ ์ •๋ง ์ •์˜ ์˜์ฃผ๋กœ ์ •๋ฆฌ๋œ ๊ธ€์ด๋‹ค. https://calliek.tistory.com/54#%C2%..
[SwiftUI] Navigation 1
ยท
๐ŸŽ Dev/SwiftUI
์ฐธ์—ฌ์ค‘์ธ ํšŒ์‚ฌ ํ”„๋กœ์ ํŠธ์—์„  UIKit๊ณผ SwiftUI ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ํƒญ๋ฐ” ๋“ฑ ํ™”๋ฉด์ „ํ™˜์€ UIKit์„ ์‚ฌ์šฉ ์ค‘์ด์–ด์„œ ์‚ฌ์‹ค SwiftUI์˜ Navigation ๊ธฐ๋Šฅ์„ ์ œ๋Œ€๋กœ ์จ๋ณธ ์ ์ด ์—†์—ˆ๋‹ค. ๋Œ€์‹  ํ‹ˆ๋‚˜๋Š”๋Œ€๋กœ ์ง๊ด€๋กœ๊ทธ๋ฅผ SwiftUI๋กœ ๋ฆฌํŒฉํ† ๋ง ํ•˜๊ณ  ์žˆ์–ด์„œ  ๊ฒธ์‚ฌ๊ฒธ์‚ฌ ํ™”๋ฉด์ „ํ™˜ ๊ด€๋ จ ๋กœ์ง์„ ์† ๋Œ€๊ธฐ ์ „ ์‚ฌ์ „ ๊ณต๋ถ€๋ฅผ ํ• ๊ฒธ Navigation์„ ์กฐ๊ธˆ ๋œฏ์–ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.   ์ฐธ๊ณ ๋กœ, ์ด ๊ธ€์—์„œ ๋‹ค๋ฃฐ Navigation์€ iOS 16 ์ด์ƒ์„ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑํ–ˆ๋‹ค. iOS 16 ์ด์ „์—” NavigationView๋ฅผ ์‚ฌ์šฉํ•˜์˜€์œผ๋‚˜, iOS 16์—์„  ํ•ด๋‹น API๊ฐ€ deprecated๊ฐ€ ๋˜์—ˆ๋‹ค. ํ•ด๋‹น๊ธ€์—์„  iOS 16 ์ด์ƒ์„ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— NavigationView์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ๋‹ค๋ฃจ์ง€ ์•Š์„ ์˜ˆ์ •์ด๋‹ค..
[SwiftUI] Infinite Carousel ๊ตฌํ˜„ํ•˜๊ธฐ 2 (feat.Timer)
ยท
๐ŸŽ Dev/๊ตฌํ˜„
https://calliek.tistory.com/62 [SwiftUI] TabView + DragGesture๋กœ ๋ฌดํ•œ ์Šคํฌ๋กค ํƒ€์ด๋จธ ์กฐ์ ˆํ•˜๊ธฐํ”„๋กœ๋ชจ์…˜ ํŒ์—… ํ™”๋ฉด์„ ๋‹ด๋‹นํ•ด์„œ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, ๋ฌดํ•œ ์Šคํฌ๋กค(์ด๋ฏธ์ง€ ๋ฐฐ์—ด ์ˆœํ™˜) + ํƒ€์ด๋จธ ์ž‘๋™์ด ๊ฐ€๋Šฅํ† ๋ก ๊ตฌํ˜„์„ ํ•ด์•ผํ–ˆ๋‹ค. - ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•œ ๊ฒƒ: 1. ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค ์ด๋ฏธ์ง€์—์„œ ์™ผ์ชฝ์œผ๋กœ ์Šค์™€calliek.tistory.com ๋ฌธ์ œ์ : - ๋ถˆ๊ณผ ์ผ์ฃผ์ผ ์ „ ๊ฐ™์€ ๋งฅ๋ฝ์˜ ๊ฒŒ์‹œ๊ธ€์„ ์ž‘์„ฑํ–ˆ์—ˆ๋Š”๋ฐ, ํ•ด๋‹น ๋ฐฉ์‹๋Œ€๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ํƒ€์ด๋จธ๊ฐ€ ์ž‘๋™ ๋  ๋•Œ index ๋ณ€๊ฒฝ ์‹œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ ์šฉ์ด ์•ˆ ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.- ๊ทธ๋ž˜์„œ ํ•ด๋‹น ๊ธ€์— ์ถ”๊ฐ€ํ•ด๋‘์—ˆ๋˜ ๋ธ”๋กœ๊ทธ๊ธ€๋กœ ์ „๋ฉด ์ˆ˜์ •์„ ํ•ด๋ณด์•˜์œผ๋‚˜, ๋“œ๋ž˜๊ทธ๋ฅผ ํ•  ๋•Œ ํ•ด๋‹น ์ธ๋ฑ์Šค์˜ ํ™”๋ฉด์ด ๋“œ๋ž˜๊ทธ ๋˜๋Š” ๋ชจ์Šต์ด ๋ณด์ด์ง€ ์•Š๊ณ  ์•ก์…˜์ด ๋‹ค ๋๋‚˜๊ณ  ์Šฌ๋ผ์ด๋“œ ์• ๋‹ˆ๋ฉ”์ด..
[SwiftUI] Infinite Carousel ๊ตฌํ˜„ํ•˜๊ธฐ 1 (feat. Timer)
ยท
๐ŸŽ Dev/๊ตฌํ˜„
ํ”„๋กœ๋ชจ์…˜ ํŒ์—… ํ™”๋ฉด์„ ๋‹ด๋‹นํ•ด์„œ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, ๋ฌดํ•œ ์Šคํฌ๋กค(์ด๋ฏธ์ง€ ๋ฐฐ์—ด ์ˆœํ™˜) + ํƒ€์ด๋จธ ์ž‘๋™์ด ๊ฐ€๋Šฅํ† ๋ก ๊ตฌํ˜„์„ ํ•ด์•ผํ–ˆ๋‹ค. - ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•œ ๊ฒƒ: 1. ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค ์ด๋ฏธ์ง€์—์„œ ์™ผ์ชฝ์œผ๋กœ ์Šค์™€์ดํ”„ ํ•˜๋ฉด ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค ์ด๋ฏธ์ง€๊ฐ€ ๋‚˜์˜ค๊ณ , ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์Šค์™€์ดํ”„ํ•˜๋ฉด ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค ์ด๋ฏธ์ง€๊ฐ€ ๋‚˜์˜ค๋Š” ๋ฌดํ•œ ์ˆœํ™˜ ๊ตฌ์กฐ์˜ ์Šคํฌ๋กค2. ๋ณ„๋„์˜ ์ œ์Šค์ฒ˜๊ฐ€ ์—†์œผ๋ฉด 3์ดˆ๋งˆ๋‹ค ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ + ์ด๋ฏธ์ง€ ๋ฐฐ์—ด ์ˆœํ™˜3. ์œ ์ €๊ฐ€ ์ˆ˜๋™์œผ๋กœ ์Šค์™€์ดํ”„ ์‹œ ๋ฐฐ์—ด ์ˆœ์„œ์— ๋งž๊ฒŒ ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ + ์ธ๋””์ผ€์ดํ„ฐ ๋ณ€๊ฒฝ - ๋‚ด๊ฐ€ ๊ฒช์€ ๊ฒƒ: 1. ํƒ€์ด๋จธ ์กฐ์ ˆ์ด ๋˜์ง€ ์•Š์•„์„œ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ˜๋งŒ ์Šค์™€์ดํ”„ ํ–ˆ์„ ๋•Œ ๋ฐ˜์”ฉ ๋‚˜์˜จ ์ด๋ฏธ์ง€๋“ค์ด ์ด์ „/๋‹ค์Œ ์ด๋ฏธ์ง€๋กœ ๋ณ€๊ฒฝ + ํƒ€์ด๋จธ ์ž‘๋™2. ์ˆ˜๋™์œผ๋กœ ์Šค์™€์ดํ”„ ํ•ด์„œ ํƒ€์ด๋จธ ๋ฉˆ์ถ”๊ฒŒ ํ–ˆ์„ ์‹œ ๋‹ค์‹œ ์ž‘๋™์ด ๋˜์ง€ ์•Š๋Š” ์ด์Šˆ --..
[SwiftUI] scrollTargetLayout๊ณผ ScrollTargetBehavior
ยท
๐ŸŽ Dev/SwiftUI
iOS 17์ด์ „๊นŒ์ง€ ScrollView๋ฅผ ํ™œ์šฉํ•  ๋•Œ ์ œํ•œ์ ์ธ ๋ถ€๋ถ„์ด ๋งŽ์•˜๋‹ค. ํŠนํžˆ ์˜คํ”„์…‹์„ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์„œ ํŽ˜์ด์ง• ๊ธฐ๋Šฅ์„ ์ปค์Šคํ…€์œผ๋กœ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ์—ˆ๋Š”๋ฐ, ์• ํ”Œ์—์„œ scrollTargetLayout๊ณผ scrollTargetBehavior๋ฅผ iOS 17๋•Œ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์„œ ์ด์ œ ์ฝ”๋“œ ๋‹จ ๋‘ ์ค„๋กœ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.  ์šฐ์„ , ํ•ด๋‹น ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์• ํ”Œ๋ฌธ์„œ๋กœ ๊ฐ„๋žตํ•˜๊ฒŒ ์•Œ์•„๋ณด์ž.   scrollTargetLayout์€ ์Šคํฌ๋กค ํƒ€๊ฒŸ์œผ๋กœ ์„ค์ •ํ•  ๋ ˆ์ด์•„์›ƒ์„ ์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•ด์ค€๋‹ค. ...๋ผ๊ณ  ์“ฐ๋ ค๋‹ˆ๊นŒ ์ด๊ฒŒ ๋ฌด์Šจ ์†Œ๋ฆฌ์•ผ, ์‹ถ์€๋ฐ ์ด ๋ฉ”์„œ๋“œ๋Š” ์Šคํฌ๋กค ์•ก์…˜์ด ์ด๋ฃจ์–ด์งˆ ๋•Œ ์–ด๋–ค ๋ ˆ์ด์•„์›ƒ์„ ๊ธฐ์ ์œผ๋กœ ์Šคํฌ๋กค์ด ์ด๋ฃจ์–ด์งˆ์ง€ ์ •ํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  scrollTargetLayout์€ ๋‹จ๋…์œผ๋กœ ์“ฐ์ด์ง€ ์•Š๊ณ , ๋Œ€์‹  ViewAlignedScro..