アプリケーション開発ポータルサイト
ServerNote.NET
Amazon.co.jpでPC関連商品タイムセール開催中!
カテゴリー【SwiftiPhone/iPadMacOS
【Swift UI】Hello Worldをフェードイン・アウトさせる
POSTED BY
2023-09-18

Xcodeで新規Swift UIプロジェクトを作成すると以下のようなサンプルが作成されると思う。

SwiftContentView.swiftGitHub Source
//
//  ContentView.swift
//  MyUITest
//
//  Created by ServerNote.NET on 2023/09/17.
//

import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundColor(.accentColor)
            Text("Hello, world!")
        }
        .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

これを以下のように変えることで、フェードイン・アウトを繰り返し、点滅するHello World VStackになる。

SwiftContentViewFadeInOut.swiftGitHub Source
//
//  ContentViewFadeInOut.swift
//  MyUITest
//
//  Created by ServerNote.NET on 2023/09/18.
//

import SwiftUI

struct ContentViewFadeInOut: View {
    @State private var fadeInOut = true
    
    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundColor(.accentColor)
            Text("Hello, world!")
        }
        .onAppear() {
            withAnimation(Animation.linear(duration:0.5)
                .repeatForever(autoreverses: true)) {
                    fadeInOut.toggle()
                }
        }.opacity(fadeInOut ? 0:1)
        .padding()
    }
}

struct ContentViewFadeInOut_Previews: PreviewProvider {
    static var previews: some View {
        ContentViewFadeInOut()
    }
}

フェードインで1回だけ登場させたい場合は以下。easeInOutをeaseInにして、durationが速いとわかりにくいので、5にしてスロー登場させている。リピートを切って、最初のfadeInOutフラグをtrueな状態にするのがポイント。

SwiftContentViewFadeIn.swiftGitHub Source
//
//  ContentViewFadeIn.swift
//  MyUITest
//
//  Created by ServerNote.NET on 2023/09/18.
//

import SwiftUI

struct ContentViewFadeIn: View {
    @State private var fadeInOut = true
    
    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundColor(.accentColor)
            Text("Hello, world!")
        }
        .onAppear() {
            withAnimation(Animation.easeIn(duration:5)) {
            //    .repeatForever(autoreverses: true)) {
                    fadeInOut.toggle()
                }
        }.opacity(fadeInOut ? 0:1)
        .padding()
    }
}

struct ContentViewFadeIn_Previews: PreviewProvider {
    static var previews: some View {
        ContentViewFadeIn()
    }
}

逆に、フェードアウトだけさせたい場合は以下のようにすればよい。easeInOutをeaseOutにしている。

SwiftContentViewFadeOut.swiftGitHub Source
//
//  ContentViewFadeOut.swift
//  MyUITest
//
//  Created by ServerNote.NET on 2023/09/18.
//

import SwiftUI

struct ContentViewFadeOut: View {
    @State private var fadeInOut = false
    
    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundColor(.accentColor)
            Text("Hello, world!")
        }
        .onAppear() {
            withAnimation(Animation.easeOut(duration:2)) {
            //    .repeatForever(autoreverses: true)) {
                    fadeInOut.toggle()
                }
        }.opacity(fadeInOut ? 0:1)
        .padding()
    }
}

struct ContentViewFadeOut_Previews: PreviewProvider {
    static var previews: some View {
        ContentViewFadeOut()
    }
}

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

☆ServerNote.NETショッピング↓
ShoppingNote / Amazon.co.jp
☆お仲間ブログ↓
一人社長の不動産業務日誌
【キーワード検索】