質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%

Q&A

0回答

937閲覧

SwiftUIでProgress Viewのあるスプラッシュ画面を作成したい

tenshonkawaru

総合スコア45

0グッド

0クリップ

投稿2021/07/06 08:47

編集2021/07/07 07:21

前提・実現したいこと

SwiftUIでプログレスバーのあるスプラッシュスクリーンを実装しようとしています。
プログレスバーについてはstoryboardのlibraryにあるProgress Viewというものを使用しようと考えています。
使用しているXcodeはVersion12.5.1です。

発生している問題・エラーメッセージ

storyboard上に配置はできるのですが、プログレスバーを起動状況にあわせて動かす方法がわかりません。
Controlを押しながらドラック&ドロップしてもコードが追加されなかったため、調べながら以下のように記述しました。

class ViewController: UIViewController { //storyboard上のプログレスバーを認識? @IBOutlet weak var progressView:UIProgressView! override func viewDidLoad() { super.viewDidLoad() //起動状況との合わせ方がわからない //とりあえず数値は仮置きしてみた //半分進むと思っていたけど動かない progressView.setProgress(0.5, animated: true) } }

storyboardの View Controller>custom class>Class にはViewControllerと記載しています。
(ここでコントローラーとの紐付けを行なっているという認識でいます)

わからないことだらけで申し訳ないのですが、ご教授いただけますと幸いです。

###追記

・InterfaceはSwiftUIを選択
・作成時からあるLaunchScreen.storyboardはアニメーションがつけられないということだったので、自前でstoryboardとUIViewControllerを作成
・Info.plistでスプラッシュ画面を作成する方法を見かけたが、プログレスバーの設定が見当たらなかったため特に変更はしていない

現状としては
・progress ViewとUIProgressViewを紐づけると真っ黒な画面になってしまう(View ControllerとUIViewControllerの紐付けだけならば表示される)
・storyboardに置かれたプログレスバーをアプリの起動状況によって動かす方法がわからない

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/07/06 09:16

もしかして Progress View を LaunchScreen.storyboard の方に配置してますか?
tenshonkawaru

2021/07/06 09:32

LaunchScreen.storyboardには配置しておりません。
hoshi-takanori

2021/07/07 03:44

Main.storyboard 上で Progress View の Progress を小さな値 (0 とか) にして、viewDidLoad で setProgress すればアニメーションされますね。ちなみに、super.viewDidLoad() は残しておきましょう。
tenshonkawaru

2021/07/07 03:52

教えていただきありがとうございます。 昨日UIProgressViewにきちんと紐付けされていないことが判明しまして、朝から紐付けして実行しているのですが、そうするとそもそもスプラッシュスクリーンが表示されないという事態になっております。 プログレスバーの紐付けを解除すると画面は表示されるので、私のやり方が悪いのだと思いますが、こういう時の解決方法はどご存知ないでしょうか?(Clean Bildや画面の作り直し等は行なってみましたが解決せず...) 質問内容と違うことを聞いてしまい恐縮ではございますが、もし差し支えなければよろしくお願いいたします。
hoshi-takanori

2021/07/07 04:25 編集

えっと、状況がよくわからないのですが、そもそも「スプラッシュスクリーン」と仰ってるものは何ですか? ホーム画面でアプリのアイコンをタップすると、まず LaunchScreen.storyboard が表示されます。ただし、この時点ではまだアプリは起動されてないので、動きは付けられなかったと思います。(← iOS 的には、これが「スプラッシュスクリーン」になります。) で、LaunchScreen.storyboard が表示されてる裏でアプリの初期化を行い、準備ができたら Main.storyboard の Initial View Controller に指定されたやつが表示されるので、画面をアニメーションしつつ残りの初期化を行うことになるでしょう。(← 「アプリでスプラッシュスクリーンをアニメーションしたい」という場合はこちらになりますが、iOS から見ると他の画面と同じ扱いです。) 初期化が済んだら、Initial View Controller の内容を更新するか、本来のメインの View Controller に遷移すれば良いのでは。
tenshonkawaru

2021/07/07 06:22

細かく記載していただきありがとうございます。 タイトル等に記載の通り、SwiftUIでの開発をしておりますので、Main.storyboardはない状況となります。 また、色々と情報が足りていなかったと感じましたので、思いつく範囲で追記をさせていただきました。 慣れないばかりに混乱させてしまい申し訳ございません。
hoshi-takanori

2021/07/07 08:28

タイトル見落としてました。SwiftUI なら storyboard や ViewController は使わずに SwiftUI の ProgressView を使えば良いのでは…。
tenshonkawaru

2021/07/07 09:08

storyboardを使用しないやり方も試してはいたのですが、画面が表示されるまでの空白の画面(storyboardであれば表示される部分)が表示された後に用意したものが表示されるという状況です。 どのように設定や記載をすれば良いでしょうか? 若干丸投げのような形となってしまい申し訳ございません。
hoshi-takanori

2021/07/07 09:18

UIKit (storyboard) でも SwiftUI でも、メインスレッドで初期化などの処理を行ってる間は UI は更新されませんので、バックグラウンドスレッドや非同期処理など (処理の内容にもよりますが) を活用する必要があるかと。
tenshonkawaru

2021/07/07 09:28

ありがとうございます。 教えていただいたことをもとに調べてみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問