iOS 앱에서 사용자에게 간단한 메시지를 보여주기 위해 토스트(Toast) 메시지를 구현하는 방법을 소개해본다.
토스트 메시지는 Android에서 흔히 사용되는 UI 패턴인데 iOS에서는 기본적으로 제공되지 않기 때문에 직접 구현해야 한다.
아래는 UIView를 확장하여 토스트 메시지를 구현한 코드이다.
import UIKit
import SnapKit
extension UIView {
func showToast(message: String, duration: TimeInterval = 2.0) {
// 토스트 표시할 Label 생성
let label = UILabel()
label.backgroundColor = UIColor.black.withAlphaComponent(0.3)
label.textColor = UIColor.white
label.textAlignment = .center
label.font = .mapoGoldenPier(16)
label.text = message // 표시 할 메세지 설정
label.alpha = 0.0 // 초기 투명도 (완전 투명)
label.layer.cornerRadius = 10
label.clipsToBounds = true
// 토스트 뷰에 추가
self.addSubview(label)
// 제약 조건
label.snp.makeConstraints {
$0.centerX.equalToSuperview()
$0.top.equalTo(self.safeAreaLayoutGuide.snp.top).offset(40)
$0.width.equalToSuperview().multipliedBy(0.6)
$0.height.equalTo(35)
}
// 애니메이션으로 토스트 메시지 표시
UIView.animate(withDuration: 0.5, delay: 0.0, options: .curveEaseIn, animations: {
label.alpha = 1.0 // 0.5초 동안 투명도 1.0으로 변경되면서 서서히 나타남
}, completion: { _ in
// 토스트 메세지가 일정 시간동안 표시된 후 사라지는 애니메이션
UIView.animate(withDuration: 0.5, delay: duration, options: .curveEaseOut, animations: {
label.alpha = 0.0 // 0.5초 동안 투명도를 0.0으로 서서히 사라짐
}, completion: { _ in
label.removeFromSuperview() // 애니메이션 끝나면 Label을 뷰에서 제거함
})
})
}
}
토스트 메시지 Label 생성
UILabel을 생성하고, 배경색, 텍스트 색상, 폰트, 정렬 등을 설정한다.alpha 값을 0.0으로 설정하여 초기에는 보이지 않게 한다.cornerRadius와 clipsToBounds를 사용하여 라벨의 모서리를 둥글게 만든다.토스트 메시지 뷰에 추가
addSubview를 사용하여 토스트 메시지 라벨을 현재 뷰에 추가한다.제약 조건 설정
SnapKit을 사용하여 라벨의 위치와 크기를 설정한다.애니메이션으로 토스트 메시지 표시
UIView.animate를 사용하여 라벨이 서서히 나타나도록 한다.alpha 값을 0.0에서 1.0으로 변경하여 페이드 인 효과를 준다.토스트 메시지 사라지는 애니메이션
duration)이 지난 후, 라벨이 서서히 사라지도록 한다.alpha 값을 1.0에서 0.0으로 변경하여 페이드 아웃 효과를 준다.아래는 showToast 메서드를 사용하는 예시이다.
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 버튼 생성 및 추가
let button = UIButton(type: .system)
button.setTitle("Show Toast", for: .normal)
button.addTarget(self, action: #selector(showToastMessage), for: .touchUpInside)
view.addSubview(button)
// 버튼 제약 조건 설정
button.snp.makeConstraints {
$0.center.equalToSuperview()
}
}
@objc func showToastMessage() {
// 토스트 메시지 표시
self.view.showToast(message: "Hello, Toast!")
}
}
메시지 위치 조정
top.equalTo(self.safeAreaLayoutGuide.snp.top).offset(40) 부분을 수정하여 메시지의 위치를 조정할 수 있다.bottom.equalTo(self.safeAreaLayoutGuide.snp.bottom).offset(-40)으로 변경한다.메시지 스타일 커스터마이징
다중 토스트 메시지 처리