投稿の経緯
個人開発中のアプリでインディケーターを作成したので備忘録。
環境
Swift version 5.4.2
Xcode version 12.5.1
完成イメージ
表示されているViewの上にopacity
をつけた背景と画面中央にインディケーターを表示させます。
インディケーターの作成
import Foundation
import SwiftUI
struct ActivityIndicator: UIViewRepresentable {
func makeUIView(context: UIViewRepresentableContext<ActivityIndicator>) -> UIActivityIndicatorView {
UIActivityIndicatorView(style: .large)
}
func updateUIView(_ uiView: UIActivityIndicatorView, context: UIViewRepresentableContext<ActivityIndicator>) {
uiView.startAnimating()
}
}
UIViewRepresentable
を使ってUIActivityIndicatorView
を作成します。
インディケーターをカスタムする場合はupdateUIView
の中でuiView
をカスタムしてあげれば編集できます。
インディケーターの呼び出し
@State private var isShowsIndicator = false
var body: some View {
/////省略/////
if isShowsIndicator {
ZStack {
Color.black.opacity(0.5)
.edgesIgnoringSafeArea(.all)
ActivityIndicator()
}
.animation(.linear)
}
}
@Stateオブジェクト
を使ってインディケータの表示する状態を管理します。
今回の場合、isShowsIndicator
がtrueでインディケータを起動させるのでこのように書いています。
インディケーターを表示する時に背景色としてZStack
で囲んでColorと重ねます。
アニメーションをつけると自然にインディケーターが表示されるので書いています。
お知らせ
現在、iOS開発案件を業務委託で募集中です(副業)。TwitterDMでご依頼をお待ちしています