SwiftUI/SwiftUI 사용

[SwiftUI] Haptic 사용하기

hyunjuntyler 2023. 6. 11. 11:02

아이폰에 진동을 주고 싶다면...? 아래와 같은 클래스를 사용하면 된다. HapticManager 를 불러와서 nofiticationOccurredimpactOccurred 를 사용하면 된다.

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

사용방법은 아래와 같이 사용하면 된다. 편의를 위해서 버튼을 사용하였다 :)

            Button("success") {
                HapticManager.instance.notification(type: .success)
            }
            Button("error") {
                HapticManager.instance.notification(type: .error)
            }
            Button("warning") {
                HapticManager.instance.notification(type: .warning)
            }
            Button("heavy") {
                HapticManager.instance.impact(style: .heavy)
            }
            Button("light") {
                HapticManager.instance.impact(style: .light)
            }
            Button("medium") {
                HapticManager.instance.impact(style: .medium)
            }
            Button("rigid") {
                HapticManager.instance.impact(style: .rigid)
            }
            Button("soft") {
                HapticManager.instance.impact(style: .soft)
            }

진동이 들어가면 재미있긴 하지만, 진동을 너무 남용하기보다는 핵심 기능을 표현할 때나 정말 알림을 주고 싶을 때 써야겠다.

 

수정 사항 

로버트 C. 마틴씨의 Clean Code 라는 책을 읽으면서 내가 생성한 HapticManager라는 클래스의 아쉬움을 발견했다! 바로 Manager가 들어가 있다는 것이다. 사실 Manager라는 단어가 필요할까? 당연히 Haptic을 불러와서 사용하는 거라면 Haptic이라는 클래스 이름만으로 충분히 나의 의도가 전달될 것이라고 판단했고, 클래스의 이름을 Haptic으로 수정했다.

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

추가 수정

싱글톤 패턴에 의문이 생기면서 아래와 같이 변경하였습니다. 과정이 궁금하시다면... 아래 링크를 참고해주세요..!

 

[Programming Study] 싱글톤 패턴(Singleton pattern)

싱글톤 패턴의 의문 시작 아래와 같이 앱에 햅틱을 사용하다가 의문이 생겼다. class Haptic { static let instance = Haptic() func notification(type: UINotificationFeedbackGenerator.FeedbackType) { let generator = UINotificationFee

codingnest.tistory.com

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