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 Chartsライブラリでボリンジャーバンドを描画してみる。

1 はじめに2 ボリンジャーバンドとは2.1 ライブラリの導入2.2 描画の準備3 ボリンジャーバンドを描画する3.1 CombinedChartViewの設定3.2 CombinedChartVie ...

swift

Swiftでシェア機能や外部アプリ起動の導線を簡単に実装できるライブラリ「SwiftShareBubbles」

1 はじめに2 準備3 実装3.1 表示3.2 用意されているパターン4 さいごに はじめに こんにちは、nukkyです。 今回はSNSでのシェア機能や外部アプリ起動の導線を追加したいときに 簡単に実 ...

swift

SwiftでTTTAttributedLabelの文字列からリンク表示

1 はじめに2 TTTAttributedLabelとは3 CocoaPodsでインストール4 実装4.1 Labelの表示4.2 タップの検知5 さいごに はじめに こんにちは。 はじめましてnuk ...

swift

[Swift]iPadのActionSheet表示でクラッシュする問題

1 はじめに2 エラー内容2.1 エラー原因2.2 まだこれで解決ではない3 さいごに はじめに こんにちは、nukkyです。 私は普段iPhoneアプリの開発を主に行っているのですが 慣れか油断かi ...

【Swift】URLスキームのアプリ間連携について

1 はじめに2 アプリ間連携とは2.1 URLスキーム2.2 App Groups3 URLスキームの実装方法について3.1 URLスキームの設定3.2 カスタムURLスキームの設定4 URLスキーム ...

フォロー

blog-page_side_responsive

2018年9月
 1
2345678
9101112131415
16171819202122
23242526272829
30  

アプリ情報

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