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