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 風のメッセージを表示する方法についてでした。
ご参考になれば幸いです。