-
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()
}
}
로딩전 로딩 'SwiftUI 100 레시피 > UIKit and SwiftUI Interoperability' 카테고리의 다른 글
SwiftUI UIKit 72 - SwiftU에서 UIKit 뷰로 데이터 전송 (0) 2022.06.28 SwiftUI UIKit 71 - UIKit앱에 SwiftUI 적용하기 (0) 2022.06.28