【Swift】iOSでToast風のメッセージ表示機能を実装する

iOS でも Android の Toast のような一定時間表示して自動で消えるメッセージ表示機能を使いたくなったので、実装方法をまとめ。
と言っても、下記の記事のコードをそのまままるっとコピー&ペーストさせていただいただけです!

Swiftでトーストを超絶シンプル・簡単に表示してみた | Kerubitoのブログ
https://kerubito.net/technology/7785

 

実装したコードはこちら。

import UIKit

class Toast {
    internal static func show(_ text: String, _ parent: UIView) {
        let label = UILabel()
        let width = parent.frame.size.width
        let height = parent.frame.size.height / 15
        var bottomPadding = 0.0
        if #available(iOS 13.0, *) {
            let scenes = UIApplication.shared.connectedScenes
            let windowScene = scenes.first as? UIWindowScene
            if let window = windowScene?.windows.first {
                bottomPadding = window.safeAreaInsets.bottom
            }
        }
        label.backgroundColor = UIColor.black.withAlphaComponent(0.6)
        label.textColor = UIColor.white
        label.textAlignment = .center;
        label.text = text
        
        label.frame = CGRect(x: parent.frame.size.width / 2 - (width / 2), y: parent.frame.size.height - height - bottomPadding, width: width, height: height)
        parent.addSubview(label)
        
        UIView.animate(withDuration: 1.0, delay: 3.0, options: .curveEaseOut, animations: {
            label.alpha = 0.0
        }, completion: { _ in
            label.removeFromSuperview()
        })
    }
}

メッセージを表示する際は、下記を実行します。

Toast.show("Toast メッセージの内容", self.view)

サンプルコードを一部改変させていただいており、ノッチありの端末で表示した際には、SafeArea 内に表示されるようにしています。
そのままのコードでもメッセージ自体は問題なく表示されるのですが、個人的に画面下のノッチでメッセージの角が欠けるのが嫌だったので、そのように変更しました。
上記を実行すると、画面下部にメッセージが表示され、3秒後にメッセージは自動で非表示になります。

 

以上、Swift で Android の Toast 風のメッセージを表示する方法についてでした。
ご参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG