[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] pagerView ๋งŒ๋“ค๊ธฐ (iOS ๋ฒ„์ „๋Œ€์‘)
ยท
๐ŸŽ Dev/๊ตฌํ˜„
ํšŒ์‚ฌ์—์„œ ์ฐธ์—ฌ์ค‘์ธ ํ”„๋กœ์ ํŠธ์—์„œ ์Šคํฌ๋กค๋ทฐ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋˜ ๋ถ€๋ถ„์— ํŽ˜์ด์ง• ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด๋‹ฌ๋ผ๋Š” ๊ธฐํš์„œ ์ˆ˜์ •์ด ์žˆ์—ˆ๋‹ค.UIKit์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์—ˆ์œผ๋ฉด UIPageViewController๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๊ฒ ์ง€๋งŒ, ํ”„๋กœ์ ํŠธ๋ฅผ SwiftUI ์ค‘์‹ฌ์œผ๋กœ ์ž‘์—… ์ค‘์ธ ์ƒํ™ฉ์ด๋ผ ์ƒ๊ฐ๋ณด๋‹ค ๊ธฐํš์„œ๋Œ€๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒŒ ๊นŒ๋‹ค๋กœ์› ๋‹ค. ๊นŒ๋‹ค๋กœ์› ๋˜ ์ด์œ ๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, 1. SwiftUI์˜ ScrollView๋Š” ์ปค์Šคํ…€์ด ์ œํ•œ์ ์ด๋ผ๋Š” ์ 2. ํšŒ์‚ฌ ํ”„๋กœ์ ํŠธ์˜ ์ตœ์†Œ ๋ฒ„์ „์ด 15์ด์ƒ์ธ ์  ๋•Œ๋ฌธ์ด์—ˆ๋‹ค. ๊ทธ๋ž˜๋„ iOS 17์ด์ƒ๋ถ€ํ„ฐ ์• ํ”Œ์—์„œ ScrollView์˜ ๊ธฐ๋Šฅ์„ ๋Œ€ํญ ์ถ”๊ฐ€ ๋ฐ ๊ฐœ์„  ํ•ด์ฃผ์–ด์„œ 17 ์ด์ƒ๋ถ€ํ„ฐ๋Š” ์‚ฌ์‹ค์ƒ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ๋Š”๋ฐ, ๋ฌธ์ œ๋Š” ScrollView์˜ ๋ฒ„์ „๋Œ€์‘์ด์—ˆ๋‹ค.     https://developer.apple.com/suppo..
[SwiftUI] CustomPopUpView ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ ํ•ด๊ฒฐํ•˜๊ธฐ
ยท
๐ŸŽ Dev/๊ตฌํ˜„
Topic: - ์ปค์Šคํ…€ ํŒ์—…์„ ๋„์šธ ๋•Œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ฃผ๊ธฐ ---> SwiftUI์—์„œ fullScreen์œผ๋กœ ํ™”๋ฉด์ „ํ™˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ๋ฅผ ์ฃผ๊ธฐ์—” ํ•œ์ •์ ์ด์—ˆ๊ณ , UIKit์—์„œ ์ž‘๋™ ๋˜๋Š” ๊ฑธ ๋ฆฌํŒฉํ† ๋ง ํ•  ๋•Œ ๋˜‘๊ฐ™์ด ๊ตฌํ˜„ํ•ด์•ผ ํ–ˆ๊ธฐ์— ํ™”๋ฉด์ „ํ™˜์„ ํ•  ๋•Œ fullScreen์„ ์“ฐ์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์•ผํ–ˆ๋‹ค. ์ ‘๊ทผ: 1. ZStack์„ ํ™œ์šฉํ•ด์„œ ๋ทฐ ์œ„์— ๋ทฐ๋ฅผ ๋„์šฐ์ž! ๊ฐ€ ์ด๋ฒˆ ์ด์Šˆ ํ•ด๊ฒฐ์ ‘๊ทผ์˜ ์ „๋ถ€๋‹ค. *** ์ด ํฌ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋“ค์€ ํ™”๋ฉด์ „ํ™˜์„ ์ค‘์ ์œผ๋กœ ์ง  ์ฝ”๋“œ์ด๊ธฐ์— UI๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜๋‹ค. (์ฆ‰, UI ๋ ˆ์ด์•„์›ƒ ์žก์€ ์ฝ”๋“œ๋Š” ์ชผ๊ธˆ... ๋”๋Ÿฝ๋‹ค.) 1-1. ์™œ ZStack์„ ์“ฐ๊ณ ์ž ํ–ˆ๋ƒ - ํ•˜๋ฉด, ZStack์— ๋Œ€ํ•œ ์ •์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค. A view that overlays its subviews, ali..
[SwiftUI] ์Šค์œ ๋กœ ์„น์…˜ ์ ‘์—ˆ๋‹คํˆ๋‹ค ๊ตฌํ˜„ํ•˜๊ธฐ
ยท
๐ŸŽ Dev/๊ตฌํ˜„
์š”์ฆ˜ ํšŒ์‚ฌ์—์„œ ์Šค์œ ๋กœ ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ์ž‘์—…์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์„น์…˜ ํด๋”ฉ์„ ๊ตฌํ˜„ํ•ด์•ผํ•  ์ผ์ด ์ƒ๊ฒผ์—ˆ๋‹ค. ์ฐพ์•„๋ณด๋ฉด list๋ฅผ ํ™œ์šฉํ•ด์„œ ๋งŒ๋“œ๋Š” ์˜ˆ์‹œ ์œ„์ฃผ๋งŒ ๋‚˜์™€์„œ ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•˜๊ณ  ํ•˜๋Š” ๊ฒƒ๊ณผ ๋งž์ง€ ์•Š์•˜๋‹ค. ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•œ ํด๋”ฉ ๋ถ€๋ถ„์€ ๋””์ž์ธ ๊ฐ€์ด๋“œ์ƒ ์ปฌ๋ ‰์…˜๋ทฐ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ๋‚˜์˜ค๋Š” ๋ทฐ์˜€๊ธฐ ๋•Œ๋ฌธ์— GirdItem์„ ํ™œ์šฉํ•ด์„œ ์ปค์Šคํ…€์œผ๋กœ ์„น์…˜์„ ๋งŒ๋“ค์–ด ์“ฐ๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋งˆ์นจ ์ฐธ๊ณ ํ•˜๊ธฐ ์ข‹์€ ํ•ด์™ธ ํฌ์ŠคํŠธ๋„ ๋ฐœ๊ฒฌํ•ด์„œ ์ฐธ์กฐํ–ˆ๋‹ค. ์•„์ง ์Šค์œ ์—์„œ ์‚ฌ์šฉํ•˜๋Š” propertyWrapper๊ฐ€ ์–ด์ƒ‰ํ•˜๋‹ค๋ฉด ์•„๋ž˜ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•˜๋Š” ๊ฑธ ์ถ”์ฒœ! --- propertyWrapper ๊ธ€ ์ž‘์—… ์ค‘             1. ์„น์…˜ ์ƒํƒœ๋ฅผ ์„น์…˜ ์ด๋ฆ„์œผ๋กœ ๊ตฌ๋ณ„ํ•ด์„œ folding ๊ธฐ๋Šฅ์„ ํ† ๊ธ€์ฒ˜๋Ÿผ ๊ฐ’์„ ๊ด€์ฐฐํ•˜๋Š” ObservableObject๋ฅผ ๋งŒ๋“ ๋‹ค. import S..
[SwiftUI] pre/next buttons๊ฐ€ ์žˆ๋Š” ์ด๋ฏธ์ง€ ์Šฌ๋ผ์ด๋” ๊ตฌํ˜„ํ•˜๊ธฐ
ยท
๐ŸŽ Dev/๊ตฌํ˜„
Topic: - pre/next ๋ฒ„ํŠผ์œผ๋กœ ์ด๋ฏธ์ง€ ์Šฌ๋ผ์ด๋” ์ž‘๋™- ์ด๋ฏธ์ง€ ์Šฌ๋ผ์ด๋”- tapGesture๋กœ ๋ฒ„ํŠผ ์ˆจ๊ธฐ๊ธฐ ๋ฐ ๋“œ๋Ÿฌ๋‚ด๊ธฐ- ์ธ๋ฑ์Šค ๋„˜๋ฒ„์— ๋”ฐ๋ผ ์ฒซ๋ฒˆ์งธ์™€ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค ์ผ ๋•Œ next ๋˜๋Š” pre ๋ฒ„ํŠผ ์ˆจ๊ธฐ๊ธฐ  ์ ‘๊ทผ: - ์ด๋ฏธ์ง€ ์Šฌ๋ผ์ด๋“œ์— ๋“ค์–ด์˜ฌ ์ด๋ฏธ์ง€ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ tabView์™€ forEach๋ฅผ ํ™œ์šฉํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.// ํ…Œ์ŠคํŠธ์šฉ ์ด๋ฏธ์ง€๋ฐฐ์—ด private var images: [String] = [ "image1", "image2", "image3", "image4" ] ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ ๋„ฃ์–ด๋‘” ์ด๋ฏธ์ง€๋กœ ํ™•์ธํ•  ์˜ˆ์ •์ด๋ผ, ์ด๋ฏธ์ง€ ๋ฐฐ์—ด์€ UIKit๊ณผ ๋˜‘๊ฐ™์ด ๋งŒ๋“ค์—ˆ๋‹ค.      - tabView๋ฅผ ์จ์„œ ์Šฌ๋ผ์ด๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, ์ด๋ฏธ์ง€ ๊ฐœ์ˆ˜์— ..