SwiftUIでActivityIndicatorを使う方法

SwiftUIでActivityIndicatorを使う方法を紹介します。

SwiftUI製のActivityIndicatorは今のところないので、UIKitUIActivityIndicatorを使う必要があります。

UIKitのViewをSwiftUIで使用するには、UIViewRepresentableを使用します。

import SwiftUI
import UIKit

struct ActivityIndicator: UIViewRepresentable {
    typealias UIViewType = UIActivityIndicatorView

    @Binding var isAnimating: Bool
    let style: UIActivityIndicatorView.Style

    func makeUIView(context: UIViewRepresentableContext<ActivityIndicator>) -> ActivityIndicator.UIViewType {
        UIActivityIndicatorView(style: style)
    }

    func updateUIView(_ uiView: UIActivityIndicatorView, context: UIViewRepresentableContext<ActivityIndicator>) {
        isAnimating ? uiView.startAnimating() : uiView.stopAnimating()
    }
}

これでSwiftUIのViewからActivityIndicatorを使うことができるようになります。

struct MyView: View {
    @State var isLoading: Bool = false

    var body: some View {
        VStack {
            ActivityIndicator(isAnimating: $isLoading, style: .medium)
        }
    }
}

エンジニアリング SwiftUI ActivityIndicator


関連記事