iOS

[Swift]アプリのフォアグラウンドに特定の処理を行う。

投稿日:

はじめに

こんにちは、鈴木です。
最近の端末ではタスクキルをしないと動きが重くなる事も減り、バックグラウンド→フォアグラウンドでアプリを起動し続ける事が多くなりました。
そのため重要なチェックなどはバックグラウンド→フォアグラウンドのタイミングでも行う実装を、備忘も兼ねて実装方法を投稿させていただきます。

今回の目標

バックフォアを行われた時に処理を設定する。
実装を行う処理として
・複数画面で通知を受ける事を想定しBaseとなるクラスを作成する
・何も処理を行わない
・ホーム画面を表示する
・バック後1分間でフォアグラウンドに戻る場合はそのままの画面を表示する
・一つ前の画面に戻す
上記の想定で作成していこうと思います。

画面構成

初期画面(FirstViewController)
第二画面(SecondViewController)
第三画面(ThirdViewController)
第四画面(FourthViewController)
おまけ (ModalViewController)

通知の設定

今回はNotificationを利用してフォアグラウンドとバックグラウンドを取得して行きたいと思います。
Notificationとは何らかのイベントをほかのクラスに送りたい時などにつかいます。
クラス間の親子関係などは特に意識せずに利用可能です。

通知の送信

通知の送信について
バックフォアを取得するだけであれば通知の送信はデフォルトで送信されているため不要です。
(急な仕様変更の時などを考えるのであれば下記と異なるKeyで通知を設定すれば可能です)
・フォアグラウンドになる時に送信されるKey
UIApplicationWillEnterForeground
・バックグラウンドになった時に送信されるKey
UIApplicationDidEnterBackground

通知の受信と削除-BaseController

今回はすべてのViewControllerで通知を受け取る設定を行います。
そのためBaseで下記のように実装しました。
・画面表示時に通知を受信設定を行う
・画面非表示時に受信非表示設定を行う
・このクラスでオーバーライドする用の関数を設定する

それぞれの画面の設定

それでは各画面の設定を行って行きましょう。
BaseViewControllerが通知の受信と削除を行うように記述しました。
それぞれの画面で行うことは下記の通知がきたときの処理のオーバーライドのみです。

初期画面(FirstViewController)

・初期画面で行いたい事
何も処理を行わない
※ViewWillAppear(戻ってきた時にも呼ばれる)で表示した時に必ずチェックがある場合
同じ内容をwillEnterForegroundをoverrideして記述してもいいかもしれません。

・コード
特になし(Base側のコードが呼ばれます)

第二画面(SecondViewController)

・第二画面で行いたい事
ホーム画面を表示する
NavigationControllerのpopToRootViewControllerを利用

・コード

第三画面(ThirdViewController

・第三画面で行いたい事
バックグラウンド後1分間でフォアグラウンドに戻る場合はそのままの画面を表示する
バックグラウンド後に時刻を取得
フォアグラウンド時に時刻を評価
条件に一致しない場合は何もしない

・コード

第四画面(FourthViewController)

・第三画面で行いたい事
一つ前の画面に戻す
navigationViewControllerのpopViewControllerを使用

・コード

おまけ (ModalViewController)

・おまけで行いたい事
ホーム画面へ遷移する
dismissでモーダルを閉じる
NavigationControllerをKeyWindowから取得する
NavigationControllerのpopToRootViewControllerを利用
・コード

さいごに

今回は画面遷移がメインで実装しました。
実際の使用パターンとしては
・画面表示時に通信のチェックを行う
・通信をキャンセルする
など通信関係がよく使われるのではないかと思います。

コードが多くなりがちなViewControllerを少しでも軽量化したいです。
最後までありがとうございます。

参考リンク

https://dev-reco.com/340
https://qiita.com/kijibato/items/a0b9b956f7a9a35dcf1d

page_footer_responsive




-iOS
-

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

swift

Swiftの配列、辞書関連メソッドの基本

1 はじめに2 配列(Array)2.1 filter2.2 map2.3 reduce3 辞書(Dictionary)3.1 filter3.2 map3.3 reduce4 さいごに はじめに 普 ...

UnityのiOSネイティブをSwiftで書く

1 はじめに2 UnityのiOSネイティブとは?3 今回作るもの4 必要な構成5 unity-swiftの導入6 必要な機能の実装6.1 Swiftクラスの作成6.2 Objective-C++でU ...

[Swift]MapViewでクラスタ機能を利用する。

1 はじめに2 クラスタリングとは3 PINのクラスタリング機能を利用する3.1 マップの作成3.2 PINの作成3.3 Pinのカスタマイズ3.4 カスタムしたPinの利用3.5 CustomPin ...

swift

Swift3でMapKitの吹き出し(Callout)タップを取得したい!

1 はじめに2 MapKitでの吹き出しタップ3 吹き出しのみタップしたい!4 さいごに はじめに こんにちは、nukkyです。 今回、iOSのMapKitでGoogleMapのように 吹き出しのタッ ...

【Swift】インスペクタを利用してWKWebViewの表示内容を確認

1 はじめに2 アプリの設定2.1 開発用のビルドであること2.2 WebViewの設定でインスペクタの利用3 インスペクタ3.1 Safariの設定3.2 インスペクタの利用4 さいごに5 おすすめ ...

フォロー

blog-page_side_responsive

2018年9月
 1
2345678
9101112131415
16171819202122
23242526272829
30  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。