| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- //
- // LNToastView.swift
- // Lanu
- //
- // Created by OneeChan on 2025/11/15.
- //
- import Foundation
- import UIKit
- import SnapKit
- var allToast = NSHashTable<UIView>(options: .weakMemory)
- func showToast(_ toast: String?) {
- guard let toast, !toast.isEmpty else { return }
-
- runOnMain {
- let view = LNToastView()
- view.show(toast)
- }
- }
- func cleanToasts() {
- allToast.allObjects.forEach { $0.removeFromSuperview() }
- }
- class LNToastView: UIView {
- private let textLabel = UILabel()
-
- override init(frame: CGRect) {
- super.init(frame: frame)
-
- setupViews()
- }
-
- func show(_ toast: String) {
- textLabel.text = toast
-
- guard let window = UIView.appKeyWindow else { return }
- window.addSubview(self)
- self.snp.makeConstraints { make in
- make.centerX.equalToSuperview()
- if LNKeyboardManager.shared.isEditing {
- make.centerY.equalToSuperview().multipliedBy(0.8)
- } else {
- make.centerY.equalToSuperview().multipliedBy(1.1)
- }
- make.leading.greaterThanOrEqualToSuperview().offset(56)
- }
-
- allToast.add(self)
-
- LNDelayTask.perform(delay: 2.5) { [weak self] in
- guard let self else { return }
- UIView.animate(withDuration: 0.3) { [weak self] in
- guard let self else { return }
- alpha = 0
- } completion: { [weak self] _ in
- guard let self else { return }
- removeFromSuperview()
- }
- }
- }
-
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
- }
- extension LNToastView {
- private func setupViews() {
- layer.cornerRadius = 18
- backgroundColor = .black.withAlphaComponent(0.8)
-
- textLabel.font = .body_m
- textLabel.textColor = .text_1
- textLabel.numberOfLines = 0
- addSubview(textLabel)
- textLabel.snp.makeConstraints { make in
- make.center.equalToSuperview()
- make.leading.equalToSuperview().offset(16)
- make.top.equalToSuperview().offset(12)
- }
- }
- }
|