아이폰에 진동을 주고 싶다면...? 아래와 같은 클래스를 사용하면 된다. HapticManager 를 불러와서 nofiticationOccurred 나 impactOccurred 를 사용하면 된다.
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()
}
}
'SwiftUI > SwiftUI 사용' 카테고리의 다른 글
[SwiftUI] Lottie 사용하기 (0) | 2023.06.16 |
---|---|
[SwiftUI][WWDC 2023] Animation 정리 (0) | 2023.06.14 |
[SwiftUI] Color Literal 코드안에서 색상표 보기 (0) | 2023.05.20 |
[SwiftUI] 커스텀 버튼 만들기 (0) | 2023.05.18 |
[SwiftUI] 커스텀 ColorSet 을 Asset 에 추가하기 (0) | 2023.05.02 |