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)
으로 변경한다.메시지 스타일 커스터마이징
다중 토스트 메시지 처리