4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめに

通信するアプリには必ずローディング画面があると思います。
ローディング画面で必須になってくるのがProgressViewだと思います。
しかし、SwiftUIのProgressViewちっさすぎません???

いまいちイケてないのでもうちょっと大きくしたいです。
大きくした時のことをここに記録しておきます。

実装

import SwiftUI

struct ScaleEffectProgressView: View {
    private let scaleEffect: CGFloat

    init(_ scaleEffect: CGFloat) {
        self.scaleEffect = scaleEffect
    }

    var body: some View {
        ProgressView()
            .progressViewStyle(.circular)
            .scaleEffect(scaleEffect)
            .frame(width: scaleEffect * 20, height: scaleEffect * 20)
    }
}
import SwiftUI

struct ContentView: View {
    var body: some View {
        ScaleEffectProgressView(3)
    }
}

Simulator Screen Recording - iPhone 14 - 2023-01-02 at 18.44.55.gif

解説

ProgressViewframeでは大きさが変わりません。
大きさを変更するにはscaleEffectを使用する必要があります。

struct ScaleEffectProgressView: View {
    private let scaleEffect: CGFloat

    init(_ scaleEffect: CGFloat) {
        self.scaleEffect = scaleEffect
    }

    var body: some View {
        ProgressView()
            .progressViewStyle(.circular)
+           .scaleEffect(scaleEffect)
    }
}

スクリーンショット 2023-01-02 18.49.19.png

これでもいい感じに思います。

しかし、これでは問題があります。

以下のように縦に並べてみます。

struct ContentView: View {
    var body: some View {
        VStack(spacing: 0) {
            ScaleEffectProgressView(3)
            Text("テスト")
        }
    }
}

そうすると重なってしまいます。

スクリーンショット 2023-01-02 18.51.01.png

ProgressViewに背景色をつけて確認してみます。
スクリーンショット 2023-01-02 18.52.43.png
このようにscaleEffectはコンポーネント自体の領域は広がらないみたいです。
ですのでframeを使用してコンポーネント自体の領域を広げる必要があります。
scaleEffectで指定した数値の20倍でちょうどいい大きさになります。

struct ScaleEffectProgressView: View {
    private let scaleEffect: CGFloat

    init(_ scaleEffect: CGFloat) {
        self.scaleEffect = scaleEffect
    }

    var body: some View {
        ProgressView()
            .progressViewStyle(.circular)
            .scaleEffect(scaleEffect)
            .frame(width: scaleEffect * 20, height: scaleEffect * 20)
            .background(Color.red)
    }
}

スクリーンショット 2023-01-02 18.56.11.png

おわり

ProgressViewにラベルなどをつける場合にはもう少し考えないといけなそうです。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?