iOS에서 SwiftMessages를 활용한 사용자 친화적 알림 구현하기

모바일 앱에서 사용자에게 정보를 전달하는 방법은 사용자 경험에 큰 영향을 미칩니다. 기본 UIAlertController는 간단하지만, 때로는 더 세련되고 맞춤화된 알림이 필요합니다. 이번 포스팅에서는 iOS 앱에서 사용자 친화적인 알림을 쉽게 구현할 수 있는 라이브러리인 SwiftMessages의 사용법을 알아보겠습니다.

SwiftMessages란?

SwiftMessages는 iOS 앱에서 사용자 정의 알림을 표시하기 위한 강력하고 유연한 라이브러리입니다. 앱 상단이나 하단에서 슬라이딩되는 알림, 화면 중앙에 나타나는 팝업 등 다양한 형태의 메시지를 쉽게 구현할 수 있습니다. 기본 제공되는 디자인을 사용하거나, 완전히 커스텀한 디자인을 적용할 수도 있습니다.

설치 방법

SwiftMessages는 CocoaPods, Carthage, Swift Package Manager 등 다양한 방법으로 설치할 수 있습니다. CocoaPods를 사용한다면 다음과 같이 Podfile에 추가합니다:

pod 'SwiftMessages'

그리고 터미널에서 다음 명령어를 실행합니다:

pod install

커스텀 알림 뷰 만들기

SwiftMessages의 가장 강력한 기능 중 하나는 완전히 커스텀된 알림 뷰를 만들 수 있다는 것입니다. 아래에서는 하단에서 올라오는 다이얼로그 형태의 커스텀 알림을 만드는 방법을 설명합니다.

1. XIB 파일 생성하기

먼저 새로운 XIB 파일을 생성합니다:

  1. Xcode에서 File > New > File… > View를 선택합니다.
  2. 파일 이름을 “BottomDialogView.xib”로 지정합니다.

2. XIB 파일 설정하기

XIB 파일에서 다음과 같이 설정합니다:

  1. File Inspector 탭에서 “Use Safe Area Layout Guides”를 해제합니다.
  2. Simulated Metrics에서 Size를 “Freeform”으로 변경합니다.
  3. Size Inspector 탭에서 width: 600, height: 309로 설정합니다.

3. 뷰 계층 구조 설정하기

이제 다음과 같은 계층 구조로 뷰를 구성합니다:

  1. 루트 뷰에 빈 View를 추가합니다.
  2. 그 안에 Background View를 추가합니다.
  3. Background View 내부에 Stack View(Content View)를 추가합니다.
  4. Content View 내에 필요한 UI 요소들(레이블, 버튼 등)을 배치합니다.

주의할 점: Interface Builder에서 Ctrl+C, Ctrl+V로 복사-붙여넣기로 생성된 뷰는 제대로 인식되지 않을 수 있습니다. 직접 추가하는 것이 안전합니다.

4. Swift 파일 생성하기

XIB와 연결할 Swift 파일을 생성합니다:

import UIKit
import SwiftMessages

class BottomDialogView: UIView {
    
    // UI 요소들의 아웃렛 연결
    @IBOutlet weak var titleLabel: UILabel!
    @IBOutlet weak var messageLabel: UILabel!
    @IBOutlet weak var cancelButton: UIButton!
    
    // 취소 버튼 액션
    var cancelAction: (() -> Void)?
    
    @IBAction func cancelButtonTapped(_ sender: UIButton) {
        cancelAction?()
    }
}

XIB 파일에서 File’s Owner를 BottomDialogView 클래스로 설정하고, 아웃렛과 액션을 연결합니다.

SwiftMessages로 알림 표시하기

이제 버튼 클릭 시 우리가 만든 커스텀 알림을 표시하는 방법을 알아보겠습니다:

@IBAction func btnQuestionmark() {
    // 커스텀 뷰 로드
    let view: BottomDialogView = try! SwiftMessages.viewFromNib()
    
    // 그림자 설정
    view.configureDropShadow()
    
    // 취소 액션 설정
    view.cancelAction = { SwiftMessages.hide() }
    
    // 설정 구성
    var config = SwiftMessages.defaultConfig
    config.presentationContext = .window(windowLevel: UIWindowLevelStatusBar)
    config.duration = .forever
    config.presentationStyle = .bottom
    config.dimMode = .gray(interactive: true)
    
    // 알림 표시
    SwiftMessages.show(config: config, view: view)
}

이 코드는 다음과 같은 기능을 수행합니다:

  1. SwiftMessages.viewFromNib()을 사용하여 XIB 파일에서 뷰를 로드합니다.
  2. 그림자 효과를 적용합니다.
  3. 취소 버튼을 누르면 알림이 사라지도록 설정합니다.
  4. 알림의 동작을 세부적으로 설정합니다:
    • presentationContext: 알림이 표시될 context를 설정합니다.
    • duration: 알림이 표시되는 시간을 설정합니다. .forever는 사용자가 닫을 때까지 계속 표시됩니다.
    • presentationStyle: 알림이 나타나는 방식을 설정합니다. .bottom은 화면 하단에서 올라옵니다.
    • dimMode: 알림 뒤 배경의 처리 방식을 설정합니다. .gray(interactive: true)는 회색 딤 처리와 함께 딤 영역 터치 시 알림이 닫히도록 합니다.

SwiftMessages 설정 옵션 상세 설명

SwiftMessages는 다양한 설정을 통해 알림의 동작을 세밀하게 제어할 수 있습니다:

1. presentationStyle

알림이 화면에 나타나는 방식을 결정합니다:

  • .top: 화면 상단에서 내려옵니다.
  • .bottom: 화면 하단에서 올라옵니다.
  • .center: 화면 중앙에 나타납니다.
  • .custom: 사용자 정의 애니메이션을 적용합니다.

2. duration

알림이 표시되는 시간을 설정합니다:

  • .automatic: 메시지 길이에 따라 자동 조절됩니다.
  • .seconds(Double): 지정된 시간(초) 동안 표시됩니다.
  • .forever: 사용자가 닫을 때까지 계속 표시됩니다.

3. dimMode

알림 뒤 배경의 처리 방식을 설정합니다:

  • .none: 배경을 변경하지 않습니다.
  • .gray(interactive: Bool): 회색 배경을 적용합니다. interactive가 true면 배경 터치 시 알림이 닫힙니다.
  • .color(UIColor, interactive: Bool): 지정된 색상의 배경을 적용합니다.
  • .blur(UIBlurEffect.Style, interactive: Bool): 블러 효과를 적용합니다.

4. presentationContext

알림이 표시될 context를 설정합니다:

  • .automatic: 자동으로 결정됩니다.
  • .window(windowLevel: UIWindow.Level): 지정된 윈도우 레벨에 표시됩니다.
  • .view(UIView): 지정된 뷰에 표시됩니다.
  • .viewController(UIViewController): 지정된 뷰 컨트롤러에 표시됩니다.

다양한 활용 예시

1. 성공/실패 알림

func showSuccessMessage(message: String) {
    let success = MessageView.viewFromNib(layout: .cardView)
    success.configureTheme(.success)
    success.configureContent(title: "성공", body: message)
    success.button?.setTitle("확인", for: .normal)
    success.buttonTapHandler = { _ in SwiftMessages.hide() }
    
    var config = SwiftMessages.defaultConfig
    config.presentationStyle = .top
    config.duration = .seconds(3)
    
    SwiftMessages.show(config: config, view: success)
}

2. 인터넷 연결 상태 알림

func showNetworkStatusMessage(isConnected: Bool) {
    let view = MessageView.viewFromNib(layout: .statusLine)
    view.configureTheme(isConnected ? .success : .error)
    view.configureContent(body: isConnected ? "인터넷에 연결되었습니다." : "인터넷 연결이 끊겼습니다.")
    
    var config = SwiftMessages.defaultConfig
    config.presentationStyle = .top
    config.preferredStatusBarStyle = .lightContent
    
    SwiftMessages.show(config: config, view: view)
}

결론

SwiftMessages는 iOS 앱에서 사용자 친화적인 알림을 쉽게 구현할 수 있는 강력한 도구입니다. 기본 UIAlertController보다 더 다양한 형태와 애니메이션을 제공하며, 완전한 커스터마이징이 가능합니다.

이 포스팅에서 설명한 방법을 활용하면 앱의 사용자 경험을 한층 업그레이드할 수 있습니다. 특히 하단에서 올라오는 다이얼로그 형태의 알림은 사용자에게 중요한 정보를 전달하면서도 앱의 사용성을 해치지 않는 좋은 UI/UX 패턴입니다.

SwiftMessages의 다양한 옵션을 실험해보고, 여러분의 앱에 가장 적합한 알림 시스템을 구축해보세요!

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다