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

blog-page_footer_336




blog-page_footer_336




-iOS
-

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

swift

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

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

[SwiftUI]SwiftUIで動的にViewの更新をする方法

1 はじめに2 SwfitUIのViewについて3 値の更新について3.1 Stateの特徴3.2 ObservedObjectの特徴3.3 EnvironmentObjectの特徴4 さいごに5 お ...

swift

【Swift】Xcode10.3でSwift5で書かれたプロジェクトでデリゲートが呼ばれない

1 はじめに2 起きた環境3 起きる条件3.1 コード上の条件3.2 ビルド時の条件4 再現4.1 テスト用コード5 対応策6 さいごに7 おすすめ書籍 はじめに こんにちはsuzukiです。Xcod ...

Xcode11のデバッグ機能

1 はじめに2 Device Conditions2.1 Thermal state condition2.2 Network link condition3 Environment Override ...

swift

[Swift]PDFKitでPDFの表示

1 はじめに1.1 前提条件2 PDKitの概要3 実装3.1 PDFの表示4 さいごに はじめに こんにちは、nukkyです。 以前、PDFKitを使わないでPDFを表示する方法を書きましたが、今回 ...

フォロー

follow us in feedly

blog-page_side_responsive

2018年9月
 1
2345678
9101112131415
16171819202122
23242526272829
30 

アプリ情報

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