swiftUI
-
projectedValueSwift 2023. 1. 17. 19:52
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ ์ด๋ฒ ํฌ์คํ ์์๋ ProjectedValue์ ๋ํด ํ์ตํด๋ณด๊ฒ ์ต๋๋ค๐ ์ด์ ์ Property Wrapper๋ฅผ ํฌ์คํ ํ๋ค ProjectedValue๋ผ๋ ๊ฒ์ ๋ํด ๋ค์์ ์ธ๊ธํ๋ค๊ณ ํ๋๋ฐ ๋ฒ์จ ์๊ฐ์ด ๋ง์ด ์ง๋ฌ๋ค์! ๊ทธ๋์ ์ด๋ฒ์๋ ๊น๋จน์ง ์๊ณ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋คใ ใ Property Wrapper๊ฐ ๋จผ์ ์ ํ์ด ๋์ด์ผ ์ดํดํ๊ธฐ๊ฐ ์์ํจ์ผ๋ก ํน์ ๊ฐ๋ ์ ๋ค์ ๋ณต์ตํ๊ณ ์ถ์ผ์๋ค๋ฉด ์๋ ํฌ์คํ ๋ถํฐ ๋ด์ฃผ์ธ์๐ https://green1229.tistory.com/238 Property Wrapper ์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ข ์ด๋ฒ ํฌ์คํ ์์๋ Swift์ Property Wrapper๋ฅผ ์์๋ณด๋ คํฉ๋๋ค๐ Property Wrapper? Swift 5.1์์ ์ฒ์ ์๊ฐ๋์ด ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ผ๋ก ํ๋กํผํฐ..
-
Opaque TypesSwift 2023. 1. 9. 11:48
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ ์ด๋ฒ ํฌ์คํ ์์๋ Swift์ Opaque Types์ ๋ํด ํ์ตํด๋ณด๊ฒ ์ต๋๋ค๐ ์ฐ์ SwiftUI์์ ๊ฐ์ฅ ๋ง์ด ์ ํด๋ณผ ์ ์๋ ํค์๋๊ฐ ์์ต๋๋ค. ๋ฐ๋ก some์ด๋ผ๋ ํค์๋์ธ๋ฐ์. struct CustomView: View { var body: some View { // CustomView ๊ตฌํ } } ์ฌ๊ธฐ์ View ํ๋กํ ์ฝ ์์ some์ด๋ผ๋ ํค์๋ ๋ณด์ด์์ฃ ? ์ด๊ฒ ์ค๋ ๋ฐฐ์๋ณผ opaque type์ ๋๋ค. Swift 5.1์์ ์๋กญ๊ฒ ๋์จ Swift์ ๊ธฐ๋ฅ์ด๊ณ iOS 13๋ถํฐ ์ ์ฉ๋์ฃ . ์ ๊ทธ๋ผ ์๋ก ์ ์ฌ๊ธฐ๊น์ง๊ณ Opaque Types์ด ๋ญ์ง ์ด์ ์์๋ณด๊ฒ ์ต๋๋ค๐บ๐ป Opaque Types? opque์ ์ฌ์ ์ ์ธ ์๋ฏธ๋ ๋ถํฌ๋ช ํ๋ค๋ ๋ป์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๊ทธ๋์ ์ค๋ ํ์ตํด๋ณผ..
-
SwiftUI - View๋ฅผ ๊ตฌ์กฐ์ฒด๋ก ์์ฑํ๋ ์ด์SwiftUI 2022. 12. 26. 09:13
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐์ ๋ฒ ํฌ์คํ ์์๋ SwiftUI์ View ํ๋กํ ์ฝ์ ๋ํด ์์๋ดค์ด์!ํน์ ์๋ณด์ จ๋ค๋ฉด ์๋ ํฌ์คํ ์ ๋จผ์ ๋ณด๊ณ ์ค์๋ฉด ๋ ๋์์ด ๋ฉ๋๋ค๐https://green1229.tistory.com/314 SwiftUI - View์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ ์ด๋ฒ ํฌ์คํ ์์๋ SwiftUI์ View Protocol์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค๐ SwiftUI๋ก ๋ทฐ๋ฅผ ๋ง๋ค๋ฉด์ ๊ผญ ๋ง๋๋ ๊ฐ๋ ์ด ์์ต๋๋ค. ๋ฐ๋ก View๋ฅผ ์ฑํํ๋๊ฒ์ธ๋ฐ์. ๊ทธ๋ฌ๋๊น ์ด Viewgreen1229.tistory.com ์ ๋ฒ ํฌ์คํ ๋ง๋ฏธ์ ์ฐ๋ฆฌ๊ฐ SwiftUI์์ View๋ฅผ ์ ์ํ ๋ ๊ตฌ์กฐ์ฒด๋ก ์ ์ํ๋ ์ด์ ์ ๋ํด ์์๋ณธ๋ค๊ณ ํ์์ต๋๋ค๐์ค๋ ๊ทธ๊ฑฐ ํ๋ฒ ์์๋ณด์์ฃ :D ์ค๋ ํฌ์คํ ์ ๊ตฌ์กฐ์ฒด์ ํด๋์ค๊ฐ ๋ฌด์์ธ์ง ๊ทธ๋ฆฌ๊ณ ์ฐจ..
-
SwiftUI - ViewSwiftUI 2022. 12. 24. 12:16
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ ์ด๋ฒ ํฌ์คํ ์์๋ SwiftUI์ View Protocol์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค๐ SwiftUI๋ก ๋ทฐ๋ฅผ ๋ง๋ค๋ฉด์ ๊ผญ ๋ง๋๋ ๊ฐ๋ ์ด ์์ต๋๋ค. ๋ฐ๋ก View๋ฅผ ์ฑํํ๋๊ฒ์ธ๋ฐ์. ๊ทธ๋ฌ๋๊น ์ด View๋ ํ๋กํ ์ฝ์ ๋๋ค. ์ด ํ๋กํ ์ฝ์ ๋ณ ๊ณ ๋ฏผ์์ด ์ฑํํ๊ณ ๋ทฐ๋ฅผ ๊ทธ๋ ค์คฌ์๋๋ฐ ์ค๋์ ์ด ํ๋กํ ์ฝ์ด ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์ด ์๋์ง์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ผ ๋ฐ๋ก ๋ณด์์ฃ ๐บ๐ป View ๊ณต์๋ฌธ์์์๋ View ํ๋กํ ์ฝ์ ์ฑ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์ผ๋ถ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ๋ทฐ๋ฅผ ๊ตฌ์ฑํ๋๋ฐ ์ฌ์ฉํ๋ ๋ชจ๋ํ์ด์ด ์ฆ ์์ ์๋ฅผ ์ ๊ณตํ๋ ํ๋กํ ์ฝ์ด๋ผ๊ณ ํฉ๋๋ค. ์ฝ๊ฒ ์ ๋ฆฌํ๋ฉด, ๋ทฐ๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ํด์ ์ฑํํ๋ ํ๋กํ ์ฝ์ด๋ผ๊ณ ์ดํดํ๊ณ ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์ด ์๋์ง ๋ณด์์ฃ ~! public protocol View { associatedty..
-
SwiftUI - refreshableSwiftUI 2022. 12. 8. 10:16
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ ์ด๋ฒ ํฌ์คํ ์์๋ SwiftUI์ List์์ ์ฌ์ฉ ๊ฐ๋ฅํ refreshable์ด๋ผ๋ ์๋ก ๊ณ ์นจ ๊ธฐ๋ฅ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค๐ ์ฐ์ ํด๋น ๊ธฐ๋ฅ์ iOS 15 ๋ถํฐ ์ฌ์ฉ์ด ๊ฐ๋ฅํด์! ์ฐธ๊ณ ๋ก WWDC2021์์ ์๊ฐ๋์์ต๋๋ค. ๋น๊ต์ ์ด๋ป๊ฒ ๋ณด๋ฉด ์ต์ ๋ฉ์๋์ด๊ธฐ์ ํ์ ์์ 13, 14๋ถํฐ ์ง์์ ํ๋ค๋ฉด ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ ์ง๋ง ์์ผ๋ก ๋ฏธ๋๋ฉ ํ๊ฒ์ ์ ์ฐจ ์ฌ๋ ค๊ฐ๊ฒ์ด๊ณ ๋ฐฐ์๋๋ฉด ์ข๊ธฐ์ ์ด์ฐธ์ ํ๋ฒ ํธ๋ผ์ด ํด๋ด ๋๋ค๐ ์ฌ๋ฌ๋ถ ๋ชจ๋ ํ ์ด๋ธ๋ทฐ ํน์ ์ปฌ๋ ์ ๋ทฐ๋ก ๋ ์ฆ, ๋ฆฌ์คํธ๋ก ๋ฐ์ดํฐ๊ฐ ๋ฟ๋ ค์ง ๋ทฐ์ ๊ฒฝ์ฐ ์ต์๋จ์์ ์๋๋ก ๋๋๊น ์ ์๋ก ๊ณ ์นจ์ด ๋๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ์ต์ ์ผ๋ก ๊ฐฑ์ ํ๋ ๊ทธ๋ฐ ๊ธฐ๋ฅ์ ๊ฐ์ง ์ฑ์ ์์ฃผ ๋ง์ด ๋ณด์ จ๊ณ ์ต์ํ์ค๊ฑฐ๋ผ ์๊ฐํฉ๋๋ค. ๋ชจ๋์๊ฒ ์ฌ์ค์ ์น์ํ ๊ธฐ๋ฅ์ด๊ธดํ๋ฐ SwiftUI..
-
SwiftUI - antialiased & interpolationSwiftUI 2022. 12. 6. 14:47
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ ์ด๋ฒ ํฌ์คํ ์์๋ SwiftUI์ ์ด๋ฏธ์ง๋ฅผ ์กฐ๊ธ ๋ ๋งค๋๋ฝ๊ฒ ๋ณด๊ฐํ๋ ๋ฉ์๋๋ค์ ๋ํด ํ์ตํ๊ฒ ์ต๋๋ค๐ ์ค๋ ์๊ฐํ ๋๊ฐ์ง๋ antialiased์ interpolation์ ๋๋ค. ๊ทธ๋ผ ์์ฐจ์ ์ผ๋ก ์์๋ณด๊ฒ ์ต๋๋ค! antialiased? ์ํฐ ์์ผ๋ฆฌ์ด์ฑ์ด ๋ญ๊น์? ์ฌ์ ์ ์ธ ์๋ฏธ๋ถํฐ ํ๋ฒ ํ์ ํด๋ณด์ฃ . ์ฐ์ ์์ผ๋ฆฌ์ด์ฑ์ ๋์งํธ ์ํ๋ง์์ ์ถ๋ ฅ์ด ์๊ณก๋๋ ํ์ ์ฆ, ๊ณ๋จ ํ์์ ์๋ฏธํฉ๋๋ค. ์ด๋ฏธ์ง ๊ฐ์ด ๋ ๋๋ง๋ ์ปจํ ์ธ ๋ฅผ ๋ณด์ฌ์ค๋ ์ถ๋ ฅ๋๋ ์ด๋ฏธ์ง์ ํฝ์ ์ด ๊นจ์ง๊ฑฐ๋ ๊ฐ์ฅ์๋ฆฌ๊ฐ ์ธํ๋ถํ ํด์ง๊ฒ ๋ํ๋๋ ํ์์ ๋๋ค. ์ฌ๊ธฐ์ ์ํฐ๊ฐ ๋ถ์์ผ๋ ์ด๋ฌํ ๋งค๋๋ฝ์ง ๋ชปํ ์ถ๋ ฅ์ ๋งค๋๋ฝ๊ฒ ๋ง๋ค์ด์ฃผ๋ ๋ฉ์๋๊ฒ ์ฃ ? ์ค์ ๊ณต์๋ฌธ์์์๋ ์๋์ ๊ฐ์ด ์๊ฐํ๊ณ ์์ต๋๋ค. "์ด๋ฏธ์ง๋ฅผ ๋ ๋๋งํ ๋ SwiftUI๊ฐ ์ํฐ ..
-
SwiftUI - renderingModeSwiftUI 2022. 12. 2. 10:14
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ ์ด๋ฒ ํฌ์คํ ์์๋ SwiftUI์์ Image๋ฅผ ์ฌ์ฉํจ์ ์์ด renderingMode๋ผ๋๊ฒ์ ๋ํด ํ์ตํด๋ณด๊ฒ ์ต๋๋ค๐ ์ค๋ ๋๋์ฒด ๋ญํ ๊ฑฐ?! ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ค๋ณด๋ฉด ๋น์ฐํ ์ด๋ฏธ์ง ์์ ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ๋๋ถ๋ถ ์์ด์ฝ ๊ฐ์ ๊ฒ๋ค์ SVG ํ์ผ ํ์์ผ๋ก ์์ ์ ๋ด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ์. ์ด๋ ์ด๋ฏธ์ง๋ฅผ ์์ ์ ๋ด๋๋ค๋ฉด ์ฐ์ธก Image Set์ Render As ํญ๋ชฉ์ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ผ ์๋์ ๊ฐ์ด 3๊ฐ์ง์ ์ ํ ์ต์ ์ด ์์ต๋๋ค. ์ ์ค๋ ๋ค๋ค๋ณผ๊ฒ์ด ์ด๊ฑฐ์์! ๋ ๋๋ง ๋ชจ๋๊ฐ ์ด๋ค๊ฒ์ด ์๊ณ ์ด๋ค ์๋ฏธ๋ฅผ ๊ฐ๋์ง์ ๋งค๋ฒ ์์ ๊ด๋ฆฌ์์์ ์์ ํด์ฃผ์ง ์์๋ ๊ฐ ์ฝ๋์์ ๋ณ๊ฒฝํ ์ ์๋๋ก renderingMode ๋ฉ์๋๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ์ค์ ๊ตฌ๋ ์ ์ด๋ค ์ฐจ์ด๊ฐ ์๋์ง ์์๋ณด๊ฒ ..
-
์ ์ญ์ ์ธ Window ๊ฐ์ฒด๋ฅผ ์ด์ฉํด LoadingView ๋์ฐ๊ธฐSwiftUI 2022. 11. 29. 16:40
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ ์ด๋ฒ ํฌ์คํ ์์๋ ์ ์ญ์ ์ผ๋ก ์์ ๋ทฐ๋ฅผ ๊ฐ์ธ๋ฒ๋ ค ๋ก๋ฉ๋ทฐ๋ฅผ ์๋์ฐ๋ก ๋ง๋ค์ด ๋์ฐ๋ ๋ฐฉ๋ฒ์ ํฌ์คํ ํด๋ณด๊ฒ ์ต๋๋ค! ์ ์ด๋ฐ ๊ตฌํ์ด ํ์ํ๊ฒ ๋์๋์? ์ฐ์ ๊ฐ ํผ์ณ์์ ๋ทฐ๋ฅผ ๊ตฌ์ฑํจ์ ์์ด ๋ฐํ ์์ญ์ด ์กด์ฌํ ๋๋ ์๊ณ ์์๋๋ ์์ต๋๋ค. ์ฆ, ๊ฐ ๋ค๋ฅธ ๊ตฌ์ฑ์ ๋ทฐ์์ ํด๋น ๋ก๋ฉ๋ทฐ๋ฅผ ์ข ์์ผ๋ก ๋์์ค๋ค๋ฉด ๋ณด์ฌ์ง๋ ๋ทฐ์ ํจ๋ฉ์ด ๋ฌ๋ผ์ง๊ธฐ์ ๋ณด์ฌ์ง๋ ์์น๊ฐ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ธฐ์กด ๋ทฐ์ ์กฐํฉ๋ค์ด ์ด๋ค์ง ์๋์ฐ ์์ ์๋ก์ด ์๋์ฐ๋ฅผ ๋ง๋ค์ด ๋ฎ์ด๋ฒ๋ฆฌ๋ ๋ฐฉ์๋ ๋ฐฉ๋ฒ์ผ๊ฒ ๊ฐ์ ๊ตฌํํด๋ดค์ด์! ์ด ๊ตฌํ์ ์ํด์๋ ์ฐ์ ๋์์ค ๋ก๋ฉ ๋ทฐ ์์ฒด๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ๊ทธ ๋ค์์ผ๋ก๋ ๋ก๋ฉ๋ทฐ๋ฅผ ๋ด์ ์๋กญ๊ฒ ๊ณต์ ํ ์๋์ฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ์ด๊ธฐํ ์ UIHostingController๋ฅผ ์ด์ฉํด ํด๋น ๋ก๋ฉ..