ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SwiftUI UIKit 69 - SwiftUI에서 UIActivityIndicatorView 로딩 구현
    SwiftUI 100 레시피/UIKit and SwiftUI Interoperability 2022. 6. 28. 14:54

    - UIViewRepresentable: UIKit을 SwiftUI에 맞게 wrapping해주는 기능

    - 함수 2개 추가 : 1) makeUIView(context:) -> UIView,   2) updateUIView(:context:)

    - typealias는 코드를 좀 더 간결하게 가독성있게 작성하기 위해서 사용

    - 2초간 로딩

     

     

    #1. LoadingIndicator.swift

    import Foundation

    import SwiftUI

    import UIKit

     

    struct LoadingIndicator: UIViewRepresentable{

        

        @Binding var loading: Bool

        

        typealias UIViewType = UIActivityIndicatorView

        

        func makeUIView(context: Context) -> UIActivityIndicatorView {

            let activityIndicatorView = UIActivityIndicatorView()

            activityIndicatorView.color = UIColor.gray

            return activityIndicatorView

        }

        

        func updateUIView(_ uiView: UIActivityIndicatorView, context: Context) {

            if loading{

                uiView.startAnimating()

            } else {

                uiView.stopAnimating()

            }

            

            

        }

        

    }

     

     

    #2.ContentView

     

    import SwiftUI

     

    struct ContentView: View {

        

        @State private var loading: Bool = false

        

        var body: some View {

            VStack{

                LoadingIndicator(loading: $loading)

                

                Button("Get Data"){

                    loading = true

                    

                    DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {

                        loading = false

                    }

                }

            }

        }

    }

     

    struct ContentView_Previews: PreviewProvider {

        static var previews: some View {

            ContentView()

        }

    }

     

     

    로딩전

     

    로딩

     

    댓글

Designed by Tistory.