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 ํด..
์ ์ฒด ๊ธ
UIKit์ผ๋ก ๊ฐ๋ฐํ๋ค๊ฐ ํ์ฌ๋ SwiftUI๋ก ์๋น์ค ๊ฐ๋ฐํ๊ณ ์๋ Fram์ ๋๋ค SwiftUI์ Combine์ ๋ํด ์๊ฒ ๋ ๊ฒ๊ณผ ๊ธฐ์ ์ ๊ณต์ ํ๋ ๋ธ๋ก๊ทธ ์ ๋๋ค. ์ฃผ์ : ์ ์๋๊ฑฐ ๋ ์ ์ ์ ์์ํฐํธ๋ ํ๋ฆฌํ
๋ค๋ ์ฌ์ฉํจ (์ฌ์ดํธ๋งํฌ) Pretendard Pretendard ํ๋ฆฌํ
๋ค๋ Pretendard ํ๋ฆฌํ
๋ค๋ ๊ธ๊ผด ๋ค์ด๋ก๋ ์ผ๋ณธ์ด ๋ฒ์ ๋ค์ด๋ก๋ GitHub์์ ๋ณด๊ธฐ system-ui๋ฅผ ๋์ฒดํ๋ ๊ธ๊ผด Apple์ system-ui๊ฐ ์ต์ํ ๋๋ก์๋ San Francisco์ Apple SD ์ฐ๋๊ณ ๋ Neo๊ฐ ์๋ cactus.tistory.com ๊ธ๊ผด ๋ค์ด๋ก๋๋ฅผ ๋๋ฌ์ ๋งฅ์ ์ ์ฅ ํผ๊ทธ๋ง์์ ์ฌ์ฉํ๊ธฐ ์ํด ๊ฐ ํญ๋ชฉ์ ๋๋ธ ํด๋ฆญํด์ ์ค์น Figma ํ
์คํธ๋ฅผ ์ถ๊ฐํ ํ ํฐํธ, ํฐํธ์ ๊ตต๊ธฐ, ์๊ฐ, ํ๊ฐ์ ์ง์ ๊ทธ ํ Text ์์ ์ ๋ค๊ฐ ์์ด์ฝ ํด๋ฆญ ํ
์คํธ ์คํ์ผ ๋ฉ๋ด๊ฐ ๋์ค๋ฉด + ๋ฒํผ์ ๋๋ฌ ์๋ก์ด ํ
์คํธ ์คํ์ผ์ ๋ฑ๋ก ์๋ก์ด ํ
์คํธ ์คํ์ผ์ ์ด๋ฆ์ ์ง์ ํ ๋ค create style์ ๋๋ฌ ์ ์ฅ..
ํฐํธ ์ง์ .font(.system(.caption, design: .rounded)) ํฐํธ ๊ตต๊ธฐ ์ง์ .fontWeight(.medium) ํฐํธ ์ ๋ ฌ .multilineTextAlignment(.leading) ์ค ์ (UIKit๊ณผ ๋ฌ๋ฆฌ 0 ์ผ๋ก ์ง์ ํ ๊ฒฝ์ฐ 1์ค, nil๋ก ์ง์ ํ ๊ฒฝ์ฐ ์ฌ๋ฌ์ค๋ก ํ์๋จ. ๊ณต๊ฐ์ด ์ถฉ๋ถํ์ง ์์ ๊ฒฝ์ฐ ๊ธ์ ์งค๋ฆผ) .lineLimit(10) ์ค๊ณผ ์ค ์ฌ์ด ๊ฐ๊ฒฉ .lineSpacing(10) ๋ง ์ค์ํ ํ์ ๋ถ๋ถ ์ง์ (์ฒ์, ์ค๊ฐ, ๋) .truncationMode(.middle) ํฐํธ ์์ ์ง์ .foregroundColor(.white) ๊ธ์์ ๊ธ์ ์ฌ์ด ๊ฐ๊ฒฉ .tracking(2) formatter ์ง์ Text(Date(), formatter: customFormat..
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 ์ ๋ ๋๋๋ผ๋ ์ฌ์ดํธ๋ฅผ ์ฃผ๋ก ์ด์ฉํฉ๋๋ค! ๊ณต์์ ์ผ๋ก ์ฌ์ฉ๊ฐ๋ฅํ ์์ ํฐํธ๊ฐ ๋ง์ด ์์ด์! ๊ทธ๋๋ ์ฌ์ฉํ๊ธฐ ์ ์ ๊ผญ ๋ผ์ด์ผ์ค ํ์ธํ๊ธฐ!! ์ํ๋ ํฐํธ๋ฅผ ์ ํํ๋ฉด ์ค๋ฅธ์ชฝ ์๋จ..
Attributed ํ
์คํธ๋ ๋ณ๋ค๋ฅธ ์ฝ๋ ์์ด ๋ฐ์ค, ํ์ดํผ๋งํฌ ์ด๋์ ์์ฑํ ์ ์์ต๋๋ค. struct LinkView: View { var body: some View { Link("๋ค์ด๋ฒ๋ก ์ด๋", destination: URL(string: "https://naver.com")!) } } Link๋ผ๋ ๋ทฐ๋ฅผ ์ด์ฉํ๋ฉด ํ๋ฉด์ ๋ณด์ผ ํ
์คํธ์ ์ด๋ํ ์น์ฌ์ดํธ ์ฃผ์๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค. Link("๋ค์ด๋ฒ๋ก ์ด๋", destination: URL(string: "https://naver.com")!) .fontWeight(.heavy) .foregroundStyle(.green) ํฐํธ์ ๋ณ๊ฒฝ๋ ์ฝ์ต๋๋ค. ๋ง์ฝ ์ฌ์ฉ์์๊ฒ ์ด๊ฒ์ด ๋จ์ ํ
์คํธ๊ฐ ์๋ ํ์ดํผ๋งํฌ ์ด๋์ด๋ผ๋ ๊ฒ์ ์ธ์ง ์์ผ ์ฃผ๊ณ ์ถ์ ๊ฒฝ์ฐ ..
bottom card view, botton sheet ๋ฑ ์ฉ์ด๊ฐ ๋ง์๋ฐ modifier์ ์ด๋ฆ์ sheet์
๋๋ค @State private var isShowingSheet: Bool = false ํ๋ฉด์ sheet์ผ๋ก ๋์ธ view๋ฅผ ๋ณด์ฌ์ค์ง ์ฌ๋ถ๋ฅผ ์ํด State๋ฅผ ํ๋ ์ ์ธํด ์ค๋๋ค. false์ด๋ฉด ํ๋ฉด์ ๋ณด์ด์ง ์๊ฒ ๋๊ณ , true์ด๋ฉด ํ๋จ์ sheet ํํ๋ก view๊ฐ ๋ณด์ด๊ฒ ๋ฉ๋๋ค. Button { isShowingSheet.toggle() print(isShowingSheet) } label: { Text("๋ฐํ
์ํธ ๋์ฐ๊ธฐ") } isShowingSheet ๊ฐ์ ๋ฐ๊พธ๊ธฐ ์ํ Button์ ํ๋ ๋ง๋ญ๋๋ค. ๋ฒํผ์ ๋๋ฅด๋ฉด isShowingSheet ์ ํ ๊ธํด ์ค๋๋ค. .sheet(isPrese..
UIKit์์ AVKit์ AVPlayer๋ฅผ ์ฌ์ฉํด์ ๋์์์ ๋ณด์ฌ ์ค ์ ์์์ต๋๋ค. SwiftUI์์ ๋์์์ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ณ ์ปจํธ๋กค ํ๊ธฐ ์ํด์๋ UIViewControllerRepresentable์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. UIKit์ UIViewController๋ฅผ SwiftUI์ View๋ก ์ฌ์ฉํ๊ธฐ ์ํด UIViewControllerRepresentable์ ์ฑํํ๋ struct๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. View๊ฐ ํ๋ฉด์ ๋ณด์ด๋ฉด ์๋์ผ๋ก ๋์์์ด ์คํ๋๋ ๊ฐ๋จํ ์์ ์
๋๋ค. import SwiftUI import AVKit struct VideoPlayerView: UIViewControllerRepresentable { /// ์ธ๋ถ์์ AVPlayer์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ก์ธ์คํ ์ ์์ @Bindin..