11import SwiftUI
22import UIKit
3- import Hardware
43
54/// View Modifier that shows a notice in front of a view.
65/// NOTE: This currently does not support.
@@ -15,12 +14,16 @@ struct NoticeModifier: ViewModifier {
1514
1615 /// Cancelable task that clears a notice.
1716 ///
18- @State var clearNoticeTask = DispatchWorkItem ( block: { } )
17+ @State private var clearNoticeTask = DispatchWorkItem ( block: { } )
1918
2019 /// Time the notice will remain on screen.
2120 ///
2221 private let onScreenNoticeTime = 5.0
2322
23+ /// Feedback generator.
24+ ///
25+ private let feedbackGenerator = UINotificationFeedbackGenerator ( )
26+
2427 func body( content: Content ) -> some View {
2528 content
2629 . overlay ( buildNoticeStack ( ) )
@@ -44,9 +47,11 @@ struct NoticeModifier: ViewModifier {
4447 performClearNoticeTask ( )
4548 }
4649 . onChange ( of: notice) { _ in
50+ provideHapticFeedbackIfNecessary ( notice. feedbackType)
4751 dispatchClearNoticeTask ( )
4852 }
4953 . onAppear {
54+ provideHapticFeedbackIfNecessary ( notice. feedbackType)
5055 dispatchClearNoticeTask ( )
5156 }
5257
@@ -72,6 +77,14 @@ struct NoticeModifier: ViewModifier {
7277 clearNoticeTask. perform ( )
7378 clearNoticeTask. cancel ( )
7479 }
80+
81+ /// Sends haptic feedback if required.
82+ ///
83+ private func provideHapticFeedbackIfNecessary( _ feedbackType: UINotificationFeedbackGenerator . FeedbackType ? ) {
84+ if let feedbackType = feedbackType {
85+ feedbackGenerator. notificationOccurred ( feedbackType)
86+ }
87+ }
7588}
7689
7790// MARK: Custom Views
0 commit comments