반응형

SwiftUI 9

SwiftUI - ConfirmationDialog 알아보기, ActionSheet Deprecated

ActionSheet 를 사용하는데 deprecated 되었다고 confirmationDialog를 사용하라고 합니다. 바로 알아봅시다. ConfirmationDialog 가장 기본적인 confirmationDialog 입니다. 첫번째 인자로 titleKey가 들어가고 isPresented 에 바인딩값을 연결해준 뒤 action 클로저 안에 우리가 평소에 쓰는 Button을 쭉 나열하면 됩니다. struct ContentView: View { @State var isPresented = false var body: some View { Button(action: { isPresented = true }) { Text("사진 불러오기") .padding() } .confirmationDialog( "제목"..

ios/swiftUI 2022.07.26

SwiftUI - Preview를 유용하게 사용하는법, previewLayout, 가로모드 Preview

SwiftUI의 Preview는 따로 앱을 빌드하여 시뮬레이터를 실행하지 않고도 코드를 입력하면 바로바로 눈에 보이도록 해주는데요. 이로 인해 더욱 더 생산성 높은 작업을 할 수 있도록 도와줍니다. SwiftUI에서 하나의 ViewController 같은 화면이 아닌 하나의 Component View를 만드는 경우가 많습니다. 하지만 이럴 때도 Preview는 선택한 기기의 화면으로 보입니다. 이런 경우나 여러가지의 형태(가로모드, 세로모드) 등등 을 한눈으로 확인 할 수 있도록 해주는 Preview의 기능에 대해 알아봅시다. 1. PreviewLayout struct ContentView_Previews: PreviewProvider { static var previews: some View { Con..

ios/swiftUI 2022.07.02

SwiftUI - Color 16진수로 표기된 색상 사용하기, hex 색상 사용하기

일반적으로 Assets에 고정된 색상을 등록하고 사용하지만 가끔은 서버에서 받은 hex값을 사용하여 색상을 표현해야 하는 경우가 있다. 역시 일반적인 방법으로 Color를 Extension 하여 새로운 이니셜라이저를 추가해준다. extension Color { init(hex: String) { let hex = hex.trimmingCharacters(in: CharacterSet.alphanumerics.inverted) var int: UInt64 = 0 Scanner(string: hex).scanHexInt64(&int) let a, r, g, b: UInt64 switch hex.count { case 3: // RGB (12-bit) (a, r, g, b) = (255, (int >> 8) ..

ios/swiftUI 2022.07.02

SwiftUI - 탭하여 키보드 숨기기

iOS 의 키보드를 보면 기본적으로 키보드를 내리는 키가 있지만 많은 이용자들이 화면을 탭했을 때 키보드가 내려가는 동작이 익숙하다. 아주 간단하게 SwiftUI에서 구현하는 방법이 있다. 1. Extension 선언 extension UIApplication { func addTapGestureRecognizer() { guard let window = windows.first else { return } let tapGesture = UITapGestureRecognizer(target: window, action: #selector(UIView.endEditing)) tapGesture.requiresExclusiveTouchType = false tapGesture.cancelsTouchesInV..

ios/swiftUI 2022.07.01

SwiftUI에서 UIKit의 Alert 사용하기

1. 왜 SwiftUI의 Alert이 아닌 UIKit의 Alert을 사용하는가? SwiftUI의 Alert 먼저 SwiftUI에서 제공되는 Alert을 사용하기 위한 필요한 요소에 대해 알아보자. 1. alert이 열려있는지 닫혀있는지에 대한 정보를 담은 Bool 타입의 State 변수를 선언한다. 2. View에 alert을 체이닝 형식으로 선언한 후 아까 선언한 State 변수를 연결한다. 3. View의 alert 클로저에 Action처리를 포함한 Alert(View)을 추가한다. struct AView: View { // 1 @State var isShowingAlert = false var body: some View { VStack { Button(action: { isShowingAlert ..

ios/swiftUI 2022.05.10

SwiftUI에서 UIkit, StoryBoard 사용하기

SwiftUI에서 UIkit 사용하기 SwiftUI에서 UIkit를 사용하기 위해서는 UIViewRepresentable을 채택하는 struct를 구현하면 됩니다. UIViewRepresentable을 채택하게 되면 필수로 구현해야 하는 makeUIView와 updateUIView가 있고 UIViewType을 원하는 UIkit의 View로 변경하면 됩니다. UIViewRepresentable // 구현 struct SwiftUIView: UIViewRepresentable { func makeUIView(context: Context) -> UIViewType { let view = UIViewType() return view } func updateUIView(_ view: UIViewType, con..

ios/swiftUI 2022.02.04

SwiftUI - Combine (3) Combine의 생명 주기(Life Cycle)

Back pressure Combine은 구독자가 데이터의 흐름을 제어하도록 설계되어 있습니다. 그래서 구독자는 파이프라인에서 처리가 발생하는 시기와 대상도 제어합니다. 구독자가 얼마나 많은 정보를 원하거나 수용할 수 있는지에 대한 정보를 제공함으로써 파이프라인 내에서 처리를 주도한다는 것을 의미합니다. 이러한 요청은 구성된 파이프라인을 통해 전파되며 각 Operator는 차례대로 데이터 요청을 수락하고 연결된 Publisher에게 정보를 요청합니다. 이 것을 백 프레셔 라고 불리는 Combine의 기능이라고 합니다! 파이프라인이 취소되면 해당 파이프라인은 다시 시작되지 않습니다. 취소된 파이프라인 대신 새로운 파이프라인을 만들어야 합니다. 생명주기(Life Cycle) 1. 구독자가 게시자에게 연결되면..

ios/Combine 2022.01.21

SwiftUI - Combine (2) 핵심 개념 (Publisher, Subscriber, Operator, Subject)

Publisher(게시자) 요청 시 데이터를 제공해줌 구독이 없는 경우 Publisher는 데이터를 제공하지 않음 두 가지 유형을 제공함(Outpt Type, Failure Type) Subscriber(구독자) 구독자는 데이터를 요청하고 Publisher가 제공한 데이터(및 오류)를 처리해야 함 입력에 대한 유형과 실패에 대한 유형 두 가지 연관된 유형 구독자는 데이터를 요청을 시작하고 수신하는 데이터의 양을 제어함 Subscriber가 없으면 게시가 아예 되지 않기 때문에 Subscriber는 작업을 주도하는 것으로 생각할 수 있습니다. Operator(연산자) 연산자는 Publisher Protocol과 Subscriber Protocol을 모두 채택하는 클래스 게시자 구독 및 모든 구독자에게 결과..

ios/Combine 2022.01.20

SwiftUI - 네비게이션바 색상 동적으로 변경하기

SwiftUI로 개발을 하다보면 네비게이션 바를 커스텀 색상으로 바꾸어야 할 경우가 생깁니다. 예를 들면 특정 색을 가지고있다가 특정 뷰에서만 투명하게 처리한다던지... UINavigationController를 extension한 후 viewDidload()를 override하여 사용할 수 있어요. View에서 편하게 사용하기 위해 View안에 NotificationCenter로 구현하여 사용합니다! extension View { func setNavigationBarColor(color: Color) { DispatchQueue.main.asyncAfter(deadline: .now() + 0.01) { NotificationCenter.defualt.post( name: NSNotification...

ios/swiftUI 2022.01.06
반응형