![見出し画像](https://assets.st-note.com/production/uploads/images/146892940/rectangle_large_type_2_f7b8656e31d10e70bf5f6f84ff7ef8e7.jpeg?width=1200)
#6 ロード機能の作成 AppGyverでアプリ開発
前回の記事#5では、検索アプリの肝である検索機能を実装しました。
今回は、検索中のマークでよく見る、スピナーの表示・非表示の設定を行っていきます。
・スピナーはなぜ必要?
![](https://assets.st-note.com/img/1720444796993-to2Y8K8HaU.png)
この機能は、アプリを利用するユーザーが、検索中やデータ更新中などで不安を抱かせないようにする機能のため、細かい機能ですがとても重要です。
・スピナーの動き
大まかなスピナーの動きとしては以下の通り。
1.検索ボタンを押す。
2.画面上のコンポーネント(テキストや画像)が消える。
3.2と同時にスピナーの表示がオンになる。
4.検索が終了する。
5.スピナーの表示がオフになる。
6.5と同時に画面上に新しいコンポーネントが表示される。
それでは、作成していきます。
・スピナーの作成方法
1. スピナーの設定
まず、スピナーをオン・オフにする、ページ変数を作成していきます。
1.検索画面で「VIEW → VARIABLES」に変更する
2.Page variablesを開く
3.ADD PAGE VARIABLEを押す
4.Variable nameを「isLoading」に変更
(名称は自分で分かるもので問題ありません)
5.Variable value typeを「True/false」に変更
![](https://assets.st-note.com/img/1720566844808-Nbd4oqVbf9.png?width=1200)
次に、実際にスピナーコンポーネントを画面上に配置します。
![](https://assets.st-note.com/img/1720617372159-q5nuUQmia0.png?width=1200)
サイズに関しては、大きく表示をさせます。
![](https://assets.st-note.com/img/1720618684342-oEcPSAa7JA.png)
スピナーの位置は、検索結果が表示されるコンポーネントの位置と同じ高さに重ねておきます。
![](https://assets.st-note.com/img/1720618704953-xBEmgx2ul0.png)
![](https://assets.st-note.com/img/1720618568937-87PI6h04pA.png?width=1200)
![](https://assets.st-note.com/img/1720618593421-jUOVTBCDQB.png?width=1200)
そして、表示を先程作成したページ変数に設定します。
![](https://assets.st-note.com/img/1720618658622-o8NTxzw1QJ.png)
![](https://assets.st-note.com/img/1720619774452-Om9oB5E8ej.png?width=1200)
![](https://assets.st-note.com/img/1720619906071-DuXWcqnBVA.png?width=1200)
これで、ページ変数がTRUEになると、スピナーが表示され、FALSEになるとスピナーが消えるロジックが出来ました。
2. 検索開始時のスピナー表示ロジックを作る
次に、1.ページを開いた時、2.検索ボタンを押した時にそれぞれスピナーが回るようにし、検索が完了するとスピナーが消えるように設定します。
1.ページを開いた時
検索画面で「VIEW → VARIABLES」に変更する
![](https://assets.st-note.com/img/1720619601560-aNU1FgDZoK.png?width=1200)
Data variablesの下にあるLOGIC CANVASを開く
![](https://assets.st-note.com/img/1720620199342-qJ6QWhQlfE.png?width=1200)
Set page variableを配置
![](https://assets.st-note.com/img/1720619586700-XOPB9Jbx0X.png?width=1200)
1.Page mounted に接続
2.Variable nameを「isLoading」に変更し、Assigned valueを「True」に変更
![](https://assets.st-note.com/img/1720651608659-TRnMDiC7bq.png?width=1200)
2.Variable nameを「isLoading」に変更し、Assigned valueを「True」に変更
再びSet page variableを配置し、Set app variableに接続
Variable nameを「isLoading」に変更し、Assigned valueを「False」に変更
![](https://assets.st-note.com/img/1720619569574-foLEkPhJdU.png?width=1200)
Logicの完成図は以下の通りです。
![](https://assets.st-note.com/img/1720619624449-TaVFdQzcxM.png?width=1200)
これでページを開いた時のロジックは完成です。
次に、検索ボタンを押した時も同様なロジックを作成していきます。
2.検索ボタンを押した時
検索ボタンのコンポーネントをタップし、LOGIC CANVASを開きます。
![](https://assets.st-note.com/img/1720620173023-SJOwI52Oy5.png?width=1200)
「1.ページを開いた時」と同様な順序で、Logicを作成していきます。
![](https://assets.st-note.com/img/1720619552798-Mbo8R533CX.png?width=1200)
以上で完成です。
これで、検索ボタンをタップした時も検索中はスピナーが表示され、検索が終了すると、非表示になる機能ができました。
3. 検索結果の表示ロジックを作る
しかし、このままではスピナーの表示有無に関わらず、検索結果の一覧が常に表示されたままになってしまいます。
欲しい機能としては、
1.スピナーが表示されているとき(ページを開いた時、検索ボタンを押した時)は検索結果の一覧を表示しない。
2.スピナーが消えたとき(検索が完了した時)に検索結果が表示される
になります。
これを達成するためには、検索結果の表示をスピナーの表示の逆の動きをするように設定します。
検索結果のコンポーネントのPROPERTIESにあるVisibleからIF関数を使って、スピナーのページ変数がTRUEのとき(つまり、スピナーが表示のとき)は、FALSE(非表示)に、逆にスピナーのページ変数がFALSEの時は、TRUEにしていきます。
![](https://assets.st-note.com/img/1720620752757-d0Or32JbGg.png?width=1200)
![](https://assets.st-note.com/img/1720620702801-bGrLzffM4m.png)
![](https://assets.st-note.com/img/1720619540562-0TMZ3ayk2F.png?width=1200)
![](https://assets.st-note.com/img/1720619451839-IXGoc4L5ay.png?width=1200)
![](https://assets.st-note.com/img/1720566664039-iU1r5SuxUO.png?width=1200)
![](https://assets.st-note.com/img/1720566753684-v5TCnGZRQd.png)
こうすることで、スピナーが表示されている時は結果は表示されず、スピナーが消えた時に結果が表示されるロジックができました。
4. 実際の動きを確認
最後にプレビュー画面で実際の動きを確認します。
![](https://assets.st-note.com/img/1720652764856-SIPo27t2Nw.png?width=1200)
![](https://assets.st-note.com/img/1720652803636-UPgcl5NLNo.png?width=1200)
うまく機能を付けることができました!
・最後に「次回の内容」
いかがだったでしょうか。
少し長くなりましたので、今回は以上とします。スピナーの機能はフリーズではなく、ちゃんとアプリが動いていることをユーザーに知らせる大切な機能ですので、検索アプリに限らず、重宝します。
ぜひ、これを機に覚えて頂ければと思います。
次回は、詳細と外部リンクの紐付けを行いたいと思います!
noteで投稿されている方にとっては、馴染みやすい可能だと思いますので、次回もご覧になっていただけるとありがたいです!