AndroidのToastのようなアラート表示ライブラリToast-Swiftを使ってみる

どうも最近新しいライブラリを使う機会が少なくなってきているkazyです。

使ってみたいライブラリはあるものの、なかなか試せてないことってよくありませんか?

kazy
本記事は、kazyが気になったライブラリを簡単に実装してみてどんな感じなのか感想をお伝えする内容になっています。

AndroidのToastのようなアラート表示ライブラリToast-Swift

Androidって標準でトーストアラートを呼び出すことができます。

数秒経つと勝手に消えるアラートって実は結構重宝しますよね。

僕がandroid開発をしていた時は、デバッグでよく使っていました。

そのような機能はiOSでは標準ではありません。

UIAlertControllerを独自にカスタマイズすれば済む話ですが、便利なライブラリがあるなら使いたいものです。

そこで見つけたのがこのToast-Swift

呼び出すだけでこんな感じになります。

トーストではあるものの、インジケーターの表示も用意されているので、このライブラリ1つでアラートとインジケーターの機能を使うことができちゃいます。

結構いいかもしれません。

では早速使ってみます。

kazy
今回の開発環境は以下です。

  • Xcode 10.2
  • swift 4.2
  • シミュレーターiOS12
  • Toast-Swift 5.0.0

インストール

インストールは、CocoaPods、Carthage、手動に対応しているようです。

今回は、みんな大好きCocoaPodsでインストールします。

Podfileに以下を記述してpod installを実行します。

kazy
ちなみに今回プロジェクト名は、Toast-Swift.Sampleにしています。

Toast-Swift.Sample.xcworkspaceファイルが生成されるのでXcodeで開き直します。

Toast-Swiftを使ってみる

では、さっそく、ViewControllerで呼び出してみます。

まずはこれ。

ホームインジケーターに若干かぶっていますね。
下に表示する場合、セーフエリアが存在する端末では微調節が必要かもしれません。

トーストの作成、表示

トーストの作成および表示に関しては、基本的にはmakeToastという関数をUIViewインスタンスから呼び出します。

このmakeToast関数の定義をみてみると引数が結構付いていますね。

一つずつ引数をみていきます。

・message:表示する本文

・duration:アラートを表示する時間

シングルトンのToastManagerのプロパティになっているので、ToastManagerで設定した値が引き継がれる感じですね。

定義はこうなっているので、デフォルトは3秒です。
public var duration: TimeInterval = 3.0

・position:トーストを表示する位置

enumで定義されており、top、center、bottomで指定が可能です。

こちらも引数のデフォルトがToastManager.shared.positionになっているので、ToastManagerで設定した値が引き継がれます。

・title:タイトル

・image:イメージ画像

・style:スタイル

スタイルを変更することができるようです。

これも省略した場合は、ToastManager.shared.styleの値が使われます。

このstyleプロパティはToastStyleクラスで定義されていて、

プロパティはこのようになっています。

色々変更できそうなので、カスタマイズ性ありそうです。

・completion:トースト非表示後の処理

型は特別なクラスで指定されているわけではなく、単純です。
completion: ((_ didTap: Bool) -> Void)? = nil

このdidTapはタップされて非表示になった場合にtrueになるようです。

またもう一つmakeToast関数がありましたが、もう一つはposition引数がなくて、CGPointで位置を指定できる用の関数でした。

kazy
point引数がある方は、title、image、completion引数にデフォルト値が定義されていません。
使わない場合は引数にnilを設定する必要があります。
地味に面倒です。

インジケーターの表示

続いてインジケーターの表示は、以下の関数を呼び出して使用します。

こんな感じです。

引数では位置を指定できます。

こちらも引数の型はToastPositionクラスなので、makeToast()と同じく、top、center、bottomの指定が可能です。

またCGPointで指定できる同様の関数もあるので任意の位置を指定できますね。

makeToastActivity()の定義はこちら

この中にlet toast = createToastActivityView()がありますが、
中身をみてみると
let style = ToastManager.shared.style
の記載がありました。

ということはシングルトンの設定をこっちも引っ張ってくるのでしょうか。
というかそうっぽいですね。

てことは通常のトーストの設定をToastManagerで設定したのち、

このmakeToastActivityを呼び出すとインジケーターの表示でも通常のトーストのスタイルが適用されてしまうことになりそうです。

ただ、styleがインジケーターに引き継がれるのはlayer.shadowColorなどのレイヤー系のプロパティのみ。

インジケーター用に以下の2つのプロパティが用意されているので

  • activityBackgroundColor
  • activityIndicatorColor

この2つは通常のトーストのスタイルが適用されることはありませんね。

んー
探してみると
makeToastActivityにはstyleが設定できるような引数が存在しません。

ちょっと使いにくい気がします。

つまり、通常のトーストで使用するスタイルをToastMangerに保持させていると、インジケーターではそれが呼び出されてスタイルがおかしなことになります。

ただ通常のトーストを使用するmakeToast関数にはstyle指定が可能なので、それ用に保持しておいたToastStyleを毎回セットするようにすればいいかと思います。

なのでToastManager.shared.styleは基本的にインジケーター用で使うのがいいのかな?

まぁでも上でも書きましたが、レイヤークラスのプロパティしかインジケーターの生成時では適用されないので、そこまで気にしないでいいかもしれません。

長くなりましたが、インジケーターの非表示は、以下を実行します。

基本的な機能は以上になります。

詳しく触れていませんが、他にも設定変更できるプロパティや、関数がいくつかありますので、興味があれば、ぜひ使ってみてください。

簡単に使ってみた感想

思っていたより使いやすいライブラリです。

非常にシンプルに作られていて、直感的に実装できる気がします。

そこまで難しいカスタマイズをしなければ、全然使えます。

ただ、このライブラリでトースト表示とインジケーター表示両者使う場合で
レイヤークラスのプロパティをそれぞれいじる場合は、どちらもToastManager.shared.styleの値を参照しているので、ちょっと工夫が必要だと思います。

そこまで考える人いないかと思いますが、念の為お気をつけ下さい。

色々なライブラリを使ってみてこうやってレビューしていくのは、結構勉強になりそうなので、引き続き定期的に書いていこうかと思います。

それでは最後までお読みいただきありがとうございました。

コメントを残す

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

CAPTCHA