[SwiftUI] Haptics

Junyoung Park·2022년 8월 18일
0

SwiftUI

목록 보기
10/136
post-thumbnail

How to add haptics and vibrations to Xcode project | Continued Learning #10

Haptics

  • 진동을 통해 특정 정보를 전달하는 방법

구현 목표

  • iOS가 지원하는 햅틱의 기본적인 종류는 NotificationImpact가 존재한다. (커스텀도 존재한다)

구현 태스크

  1. 싱글턴 패턴으로 햅틱 메소드를 담당하는 매니저 클래스를 생성한다.
  2. 특정 버튼에 따라 노티피케이션, 임팩트 등을 사용한다.

핵심 코드

	func notification(type: UINotificationFeedbackGenerator.FeedbackType) {
        let generator = UINotificationFeedbackGenerator()
        generator.notificationOccurred(type)
    }
    
    func impact(style: UIImpactFeedbackGenerator.FeedbackStyle) {
        let generator = UIImpactFeedbackGenerator(style: style)
        generator.impactOccurred()
    }

소스 코드

import SwiftUI

class HapticManager {
    static let instance = HapticManager()
    private init() {}
    
    func notification(type: UINotificationFeedbackGenerator.FeedbackType) {
        let generator = UINotificationFeedbackGenerator()
        generator.notificationOccurred(type)
    }
    
    func impact(style: UIImpactFeedbackGenerator.FeedbackStyle) {
        let generator = UIImpactFeedbackGenerator(style: style)
        generator.impactOccurred()
    }
}

struct HapticsBootCamp: View {
    let hapticManager = HapticManager.instance
    var body: some View {
        VStack(spacing: 20) {
            Button("SUCCESS") { hapticManager.notification(type: .success) }
            Button("WARNING") { hapticManager.notification(type: .warning) }
            Button("ERROR") { hapticManager.notification(type: .error) }
            Divider()
            Button("SOFT") { hapticManager.impact(style: .soft) }
            Button("LIGHT") { hapticManager.impact(style: .light) }
            Button("MEDIUM") { hapticManager.impact(style: .medium) }
            Button("RIGID") { hapticManager.impact(style: .rigid) }
            Button("HEAVY") { hapticManager.impact(style: .heavy) }
        }
    }
}
profile
JUST DO IT

0개의 댓글