728x90
반응형
안녕하세요 욱승입니다.
이 포스팅에서는 Toast메세지에 대해 알아보겠습니다.
아시는 분들은 아시겠지만 안드로이드에서는 Toast메시지가 내장 되어있지만 iOS에서는 Toast메시지를 지원하지 않기 때문에 라이브러리를 사용해야하는데요.
Podfile
라이브러리 버전
자주쓰이는 세가지 정도만 알아보겠습니다!
예제
//
// ViewController.swift
// ToastMessageExample
//
// Created by plsystems on 2023/03/10.
//
import UIKit
import Then
import SnapKit
// MARK: - Protocol, View 속성에 관한 내용
protocol ViewAttributes: AnyObject {
func setUI()
func setAttributes()
}
class ViewController: UIViewController, ViewAttributes {
// MARK: - create Instance, Use Then
lazy var btn1 = UIButton().then {
$0.setTitle("btn1", for: .normal)
$0.setTitleColor(.white, for: .normal)
$0.backgroundColor = .systemBlue
$0.layer.cornerRadius = 5
$0.tag = 1
$0.addTarget(self, action: #selector(btnAction(_:)), for: .touchUpInside)
}
lazy var btn2 = UIButton().then {
$0.setTitle("btn2", for: .normal)
$0.setTitleColor(.white, for: .normal)
$0.backgroundColor = .systemBlue
$0.layer.cornerRadius = 5
$0.tag = 2
$0.addTarget(self, action: #selector(btnAction(_:)), for: .touchUpInside)
}
lazy var btn3 = UIButton().then {
$0.setTitle("btn3", for: .normal)
$0.setTitleColor(.white, for: .normal)
$0.backgroundColor = .systemBlue
$0.layer.cornerRadius = 5
$0.tag = 3
$0.addTarget(self, action: #selector(btnAction(_:)), for: .touchUpInside)
}
override func viewDidLoad() {
super.viewDidLoad()
setUI()
setAttributes()
}
// MARK: - addSubview
func setUI() {
self.view.addSubview(btn1)
self.view.addSubview(btn2)
self.view.addSubview(btn3)
}
// MARK: - Autolayout
func setAttributes() {
btn1.snp.makeConstraints {
$0.top.equalTo(self.view.safeAreaLayoutGuide).offset(20)
$0.centerX.equalToSuperview()
$0.width.equalTo(100)
$0.height.equalTo(30)
}
btn2.snp.makeConstraints {
$0.top.equalTo(btn1.snp.bottom).offset(20)
$0.centerX.equalToSuperview()
$0.width.equalTo(100)
$0.height.equalTo(30)
}
btn3.snp.makeConstraints {
$0.top.equalTo(btn2.snp.bottom).offset(20)
$0.centerX.equalToSuperview()
$0.width.equalTo(100)
$0.height.equalTo(30)
}
}
// MARK: - 버튼 클릭, tag로 분기처리
@objc func btnAction(_ sender: Any) {
guard let btn = sender as? UIButton else {
print("오류발생")
return
}
switch btn.tag {
case 1:
makeToast(message: "makeToast")
case 2:
makeToast2(message: "makeToast2", duration: 3.0, position: .center)
case 3:
guard let heart = UIImage(systemName: "heart.fill") else {return}
makeToast3(message: "makeToast3", duration: 3.0, position: .bottom, title: "title", image: heart)
default:
break
}
}
}
//
// ToastHelper.swift
// ToastMessageExample
//
// Created by plsystems on 2023/03/10.
//
import Toast_Swift
// MARK: - Normal Toast, duration 3초(Default)/ position 하단(Default)
/// Normal Toast, Duration 3초(Default), Position 하단(Default)
func makeToast(message: String) {
if let scene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene {
let keyWindow = scene.windows.first(where: { $0.isKeyWindow })
keyWindow?.rootViewController?.view.makeToast(message)
}
}
// MARK: - Normal Toast, Message 내용 / duration 지속시간 / position Toast위치
/// Normal Toast 2, Message 내용 / duration 지속시간 / position Toast위치
func makeToast2(message: String, duration: CGFloat, position: ToastPosition) {
if let scene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene {
let keyWindow = scene.windows.first(where: { $0.isKeyWindow })
keyWindow?.rootViewController?.view.makeToast(message, duration: duration, position: position)
}
}
// MARK: - Image, Title Toast, Message 내용 / duration 지속시간 / position Toast위치 / title 타이틀 / image 이미지
///Image, Title Toast, Message 내용 / duration 지속시간 / position Toast위치 / title 타이틀 / image 이미지
func makeToast3(message: String, duration: CGFloat, position: ToastPosition, title: String, image: UIImage) {
if let scene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene {
let keyWindow = scene.windows.first(where: { $0.isKeyWindow })
keyWindow?.rootViewController?.view.makeToast(message, duration: duration, position: position, title: title, image: image)
}
}
결과
결론
이런걸 보면 안드로이드와 iOS는 개발방식은 비슷하지만 다름을 느낀다.
당연히 내장 되어 있겠지 하는 기능이나 객체가 없다던가 ..
그치만 언제나 그랬듯 정답을 찾자 ㅋ
나 좀 멋있었을지도 ?
소스는 GitHub에서 보실수 있습니다.
Reference
728x90
반응형
'iOS > Library' 카테고리의 다른 글
[Swift] 구글 AdMob, 앱에 광고달기 (0) | 2023.03.15 |
---|---|
[iOS] CocoaPods could not find compatible versions for pod (0) | 2023.03.14 |
[Swift] JSPhoneFormat 휴대폰번호 포맷팅 (0) | 2023.02.20 |
[Swift] Then 라이브러리 예제 (0) | 2023.02.20 |
[Swift] 에러로그 - Ignoring ffi-1.15.5 because its extensions are not built. Try: gem pristine ffi --version 1.15.5 (0) | 2023.02.20 |