iOS ๐ŸŽ

๋ช‡ ๋…„ ๋™์•ˆ ํ•œ ์ฃผ์— 2๋ฒˆ ์ •๋„ ํ•˜๋˜ ์ง€์ธ๋“ค๊ณผ์˜ ํšŒ๊ณ  ๋ชจ์ž„์ด ๋๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฒˆ์— ์ด์ง์„ ํ•˜๋ฉด์„œ ๊ธฐ๋ก์˜ ์ค‘์š”์„ฑ์„ ๋А๊ผˆ์–ด์š”. ๊ธฐ๋ก์ด ์—†์œผ๋ฉด ๊ทธ์ € ์ƒ๊ฐ ์†์—์„œ ์Šค์ณ ์ง€๋‚˜๊ฐ€๋ฒ„๋ฆฌ๋”๋ผ๊ตฌ์š”. ์ œ๊ฐ€ ๊ณผ๊ฑฐ์— ๋ฌด์—‡์„ ํ–ˆ๋Š”์ง€ ์–ผ๋งˆ๋‚˜ ์„ฑ์žฅํ–ˆ๋Š”์ง€ ์•Œ๊ณ  ์•Œ๋ฆด๋ ค๋ฉด ๊ธฐ๋ก์„ ํ•ด์•ผ ๊ฒ ๊ตฌ๋‚˜ ์‹ถ๋”๋ผ๊ตฌ์š”. ํšŒ์‚ฌ์—์„œ ๋งค์ฃผ ํšŒ๊ณ  ๋ชจ์ž„์„ ์ง„ํ–‰ํ•˜๋‹ˆ ๋” ์ด์ƒ์˜ ํšŒ๊ณ  ๋ชจ์ž„ ๊ฐ€์ž…์€ ๊ทธ๋งŒ ๋‘๊ณ  ์Šค์Šค๋กœ ํฌ์ŠคํŒ… ํ•˜๋ฉฐ ๋˜๋Œ์•„๋ณด๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค! (์ง€๊ธˆ ์ด ์‹œ์ ์—๋„ ๋‹ค๋ฅธ ๋ชจ์ž„ ํ•˜๋‚˜๋ฅผ ์ถ”์ฒœ ๋ฐ›์•˜๋Š”๋ฐ ํ• ๊นŒ ๋ง๊นŒ ์ •๋ง ๊ณ ๋ฏผ์ด์ž…๋‹ˆ๋‹นใ… ใ…  ๋‹ค๋ฅธ ๋ถ„์•ผ ์‚ฌ๋žŒ๋“ค ๋งŒ๋‚  ์ˆ˜ ์žˆ๋Š”๊ฒŒ ํ”์น˜ ์•Š์•„์„œ..) ์ƒ๊ฐ๋ณด๋‹ค TMI๋ผ ์•„๋ฌด๋„ ์•ˆ ์ฝ์—ˆ์œผ๋ฉด ์ข‹๊ฒ ์ง€๋งŒ ๊ทธ๋ž˜๋„ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ฝ๊ณ  ํ”ผ๋“œ๋ฐฑ ํ•ด์ค€๋‹ค๋ฉด ํ–‰๋ณตํ•  ๊ฒƒ ๊ฐ™์€.. ์šฐ์„  ์ ์–ด๋ด…๋‹ˆ๋‹น .. ๐Ÿฎ Q1 (1 ~ 3์›”) ํ”„๋กœ์ ํŠธ์˜ ์—ฐ์† ์ž‘๋…„ 22๋…„ 6..
๋„ค๋น„๊ฒŒ์ด์…˜์€ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฐ๊ณผ ๋ทฐ ์‚ฌ์ด๋ฅผ ์ด๋™ํ•˜๊ณ  ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ UINavigationController์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ navigationStack์„ ๊ด€๋ฆฌํ•˜๋ฉฐ NavigationBar ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ํ™”๋ฉด๊ฐ„ ์ด๋™์„ ์ง€์› NavigationView๋Š” iOS ๊ธฐ์ค€ 13.0 ~ 17.0 ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋ฉฐ deprecated ์˜ˆ์ •์ด๊ธฐ ๋•Œ๋ฌธ์— iOS 16.0 ๋ถ€ํ„ฐ ์ง€์›ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ผ๋ฉด NavigationStack์„ ์‚ฌ์šฉ NavigationLink NavigationStack, NavigationSplitView ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ NavigationView์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ struct NavigationLink where Label : View, Destination : View label์€ ํ˜„์žฌ ํ™”๋ฉด์— ๋ณด์ด๋Š” ๋ทฐ๋กœ์„œ Navi..
Background Problems ๊ธฐ์กด ํ”„๋กœ์ ํŠธ๋Š” NavigationView๋‚˜ NavigationStack์ด ์—†๋‹ค. ํ™”๋ฉด ์ด๋™์„ ํ•˜๊ณ ์ž ํ•  ๋•Œ๋Š” ์ด๋™ ํ•  View๋ฅผ ZStack์„ ์‚ฌ์šฉํ•ด์„œ ๊ธฐ์กด ๋ทฐ ์œ„์— ๋ฎ์–ด ์”Œ์šฐ๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ์—ฌ๊ธฐ์— navigation push ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ๋ฅผ ์ฃผ๊ธฐ ์œ„ํ•ด ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ๋ฐ€๊ณ  ๋“ค์–ด์˜ค๋Š” ๋“ฏํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค. ๋ฉ”์ธ์—๋Š” ํƒญ๋ทฐ๊ฐ€ ์กด์žฌํ•˜๊ณ  ๊ฐ ํƒญ์—๋Š” rootView๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” View๊ฐ€ ์กด์žฌํ•œ๋‹ค. rootView์—์„œ ์ƒ์„ธ๋กœ ์ด๋™ํ•˜๋ฉด ์ด ์ƒ์„ธ ํ™”๋ฉด์€ ํƒญ๋ฐ”๋ฅผ ๊ฐ€๋ฆฌ๋ฉด์„œ ํ™”๋ฉด ์ „์ฒด๋ฅผ ์ฐจ์ง€ํ•ด์•ผ ํ•œ๋‹ค. ํƒญ๋ทฐ๊ฐ€ ๋ณด์ด์ง€ ์•Š์•„์•ผ ํ•˜๋ฏ€๋กœ window์—์„œ UITabBar์„ ์ฐพ๊ณ  window ์ „์ฒด offset์„ ์กฐ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ํƒญ๋ทฐ๋ฅผ ๊ฐ€๋ฆฌ๊ณ  ๋ณด์ด๊ฒŒ ..
๋™์ผํ•œ UI ๊ตฌ์„ฑ์„ ๊ฐ€์ง€์ง€๋งŒ ๊ฐ€๋กœ๋ชจ๋“œ์—์„œ ์„ธ๋กœ๋ชจ๋“œ๋กœ ๋ณ€๊ฒฝ๋ ๋•Œ ํ™”๋ฉด์˜ ๋„“์ด๊ฐ€ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํŠน์ • UI์—์„œ๋Š” ํ™”๋ฉด์ด ๊นจ์งˆ ์ˆ˜ ์žˆ์–ด์„œ ์ด์— ๋Œ€์‘ํ•ด์•ผ ํ•ด์š”. ViewBuilder๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ํ™”๋ฉด์—์„œ ๋Œ€์‘ ๊ฐ€๋Šฅํ•œ View๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ํ˜น์‹œ ViewBuilder๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด ์•„๋ž˜ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•˜์„ธ์š”! [SwiftUI] ViewBuilder ์•Œ์•„๋ณด๊ธฐ Definition @resultBuilder struct ViewBuilder ํด๋กœ์ €์—์„œ ๋ทฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ํŒŒ๋ผ๋ฏธํ„ฐ ์†์„ฑ func contextMenu( @ViewBuilder menuItems: () -> MenuItems ) -> some View ํด๋กœ์ € ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•ด child view๋ฅผ ์ƒ์„ฑํ•˜๊ณ ์ž framios.tis..
Definition @resultBuilder struct ViewBuilder ํด๋กœ์ €์—์„œ ๋ทฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ํŒŒ๋ผ๋ฏธํ„ฐ ์†์„ฑ func contextMenu( @ViewBuilder menuItems: () -> MenuItems ) -> some View ํด๋กœ์ € ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•ด child view๋ฅผ ์ƒ์„ฑํ•˜๊ณ ์ž ํ•  ๋•Œ ViewBuilder๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„์™€ ๊ฐ™์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ViewBuilder๋ฅผ ์‚ฌ์šฉํ•ด ํด๋กœ์ €๋กœ child view๋ฅผ ํฌํ•จํ•˜๋Š” ๋ทฐ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. myView.contextMenu { Text("Cut") Text("Copy") Text("Paste") if isSymbol { Text("Jump to Definition") } } contextMenu์˜ menuItems ํด..
ํฐํŠธ๋Š” ํ”„๋ฆฌํ…๋‹ค๋“œ ์‚ฌ์šฉํ•จ (์‚ฌ์ดํŠธ๋งํฌ) Pretendard Pretendard ํ”„๋ฆฌํ…๋‹ค๋“œ Pretendard ํ”„๋ฆฌํ…๋‹ค๋“œ ๊ธ€๊ผด ๋‹ค์šด๋กœ๋“œ ์ผ๋ณธ์–ด ๋ฒ„์ „ ๋‹ค์šด๋กœ๋“œ GitHub์—์„œ ๋ณด๊ธฐ system-ui๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ธ€๊ผด Apple์˜ system-ui๊ฐ€ ์ต์ˆ™ํ•œ ๋‚˜๋กœ์„œ๋Š” San Francisco์™€ Apple SD ์‚ฐ๋Œ๊ณ ๋”• Neo๊ฐ€ ์—†๋Š” cactus.tistory.com ๊ธ€๊ผด ๋‹ค์šด๋กœ๋“œ๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ๋งฅ์— ์ €์žฅ ํ”ผ๊ทธ๋งˆ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ ํ•ญ๋ชฉ์„ ๋”๋ธ” ํด๋ฆญํ•ด์„œ ์„ค์น˜ Figma ํ…์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„ ํฐํŠธ, ํฐํŠธ์˜ ๊ตต๊ธฐ, ์ž๊ฐ„, ํ–‰๊ฐ„์„ ์ง€์ • ๊ทธ ํ›„ Text ์˜†์— ์  ๋„ค๊ฐœ ์•„์ด์ฝ˜ ํด๋ฆญ ํ…์ŠคํŠธ ์Šคํƒ€์ผ ๋ฉ”๋‰ด๊ฐ€ ๋‚˜์˜ค๋ฉด + ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ƒˆ๋กœ์šด ํ…์ŠคํŠธ ์Šคํƒ€์ผ์„ ๋“ฑ๋ก ์ƒˆ๋กœ์šด ํ…์ŠคํŠธ ์Šคํƒ€์ผ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•œ ๋’ค create style์„ ๋ˆŒ๋Ÿฌ ์ €์žฅ..
SwiftUI์—์„œ๋Š” UIKit์˜ UITextField ๋Œ€์‹ ์— TextField๋ผ๋Š” View๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. TextField๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด ๊ธฐ์กด์— UITextFieldDelegate์˜ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•  ๋•Œ๊ฐ€ (์•„์ง๊นŒ์ง€๋Š”) ๋งŽ์Šต๋‹ˆ๋‹ค. SwiftUI์—์„œ UITextField๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ UIViewRepresentable๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์–ด์š”. UIViewRepresentable์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ ์•„๋ž˜ ํฌ์ŠคํŒ… ์ฐธ์กฐ 2023.08.20 - [SwiftUI] - [SwiftUI] UIKit ์‚ฌ์šฉ์„ ์œ„ํ•œ UIViewRepresentable ์ดํ•ดํ•˜๊ธฐ [SwiftUI] UIKit ์‚ฌ์šฉ์„ ์œ„ํ•œ UIViewRepresentable ์ดํ•ดํ•˜๊ธฐ protocol UIViewRepresentable : View where S..
๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๋ณด๋‹ˆ ํฌ์ŠคํŒ…์— ์ฝ”๋“œ ๋ฐ•์Šค๊ฐ€ ํฌํ•จ๋ ๋•Œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ํ‹ฐ์Šคํ† ๋ฆฌ ๋ธ”๋กœ๊ทธ๋Š” html๊ณผ css๋ฅผ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ์–ด ์›ํ•˜๋Š” ํฐํŠธ๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ง‰์ƒ ์ฝ”๋“œ ๋ฐ•์Šค์— ๊ธ€๊ผด์€ ์ ์šฉ์ด ์•ˆ๋  ๋•Œ๊ฐ€ ์žˆ๊ณ , ์›ํ•˜๋Š” ํ•œ๊ธ€ ํฐํŠธ๋ฅผ ์„ค์ •ํ•˜๋ฉด ์˜์–ด์˜ l, i, L, I ์˜ ๊ตฌ๋ถ„์ด ์–ด๋ ค์›Œ ์ฝ”๋”ฉ ๊ธ€๊ผด๋กœ ์ ์ ˆํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฝ”๋“œ ๋ฐ•์Šค์—๋งŒ ๋‹ค๋ฅธ ํฐํŠธ๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํฌ์ŠคํŒ… ํ•ด๋ด…๋‹ˆ๋‹น ์šฐ์„ ์€ ๋ธ”๋กœ๊ทธ ์ „์ฒด ํฐํŠธ ๋ณ€๊ฒฝ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹น https://noonnu.cc/font_page/92 ๋ˆˆ๋ˆ„ D2Coding - ๋„ค์ด๋ฒ„ noonnu.cc ์ €๋Š” ๋ˆˆ๋ˆ„๋ผ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ์ฃผ๋กœ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค! ๊ณต์‹์ ์œผ๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์˜ˆ์œ ํฐํŠธ๊ฐ€ ๋งŽ์ด ์žˆ์–ด์š”! ๊ทธ๋ž˜๋„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๊ผญ ๋ผ์ด์„ผ์Šค ํ™•์ธํ•˜๊ธฐ!! ์›ํ•˜๋Š” ํฐํŠธ๋ฅผ ์„ ํƒํ•˜๋ฉด ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ..
fram
'iOS ๐ŸŽ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (4 Page)