技術ブログ

プログラミング、IT関連の記事中心

スプラッシュのViewを取得する方法【Swift】

■はじめに

以下のようにスプラッシュのViewを取得したい場合があります。(たまに)

  • スプラッシュ表示後も一定時間スプラッシュを表示したい
  • 特定の画面でローディングダイアログなどの代わりにスプラッシュを表示したい(裏で画面遷移するなど)

その場合に、スプラッシュと同じような構成でViewを作成してもいいですが、二度手間になります。

ここでは、簡単にスプラッシュからViewを取得して使用する方法を記載します。

■手順

以下のように記載することで、スプラッシュのViewを取得できます。

let splashStoryboardName = Bundle.main.object(forInfoDictionaryKey: "UILaunchStoryboardName") as? String ?? ""
let storyboard = UIStoryboard(name: splashStoryboardName, bundle: nil)
let viewController = storyboard.instantiateInitialViewController()
let splashView = viewController?.view ?? UIView()

まずは以下でSplashで使用しているStoryboardの名前を取得します。

基本は「LaunchScreen」になっていると思いますが、変更されても問題ないようにInfo.plistから取得しています。

Info.plistの「Launch screen interface file base name」がSplashのストーリーボード名です。

let splashStoryboardName = Bundle.main.object(forInfoDictionaryKey: "UILaunchStoryboardName") as? String ?? ""

上記で取得したStoryboard名から、Storyboardのインスタンスを取得します。

let storyboard = UIStoryboard(name: splashStoryboardName, bundle: nil)

取得したStoryboardの「Is Initial View Controller」にチェックされているViewControllerを取得します。

let viewController = storyboard.instantiateInitialViewController()

該当のViewControllerの一番親のViewを取得します。

※このViewがスプラッシュのViewになります。

let splashView = viewController?.view ?? UIView()

■おまけ

以下のようにすることで、どのような画面でも、一番上にスプラッシュのViewを表示することが可能です。

let splashStoryboardName = Bundle.main.object(forInfoDictionaryKey: "UILaunchStoryboardName") as? String ?? ""
let storyboard = UIStoryboard(name: splashStoryboardName, bundle: nil)
let viewController = storyboard.instantiateInitialViewController()
let splashView = viewController?.view ?? UIView()
let window = UIApplication.shared.keyWindow!
window.addSubview(splashView);

任意のタイミングで、以下のようにViewを破棄することで、スプラッシュ表示前の画面に戻せます。

splashView.removeFromSuperview()