ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SwiftUI - NotificationCenter
    SwiftUI 2021. 9. 19. 12:06

    안녕하세요. 그린입니다🟢

    이번 포스팅에서는 SwiftUI에서 NotificationCenter를 활용하는 방법에 대해 학습하겠습니다🧑🏻‍💻

     

    UIKit에서는 잘 알겠는데 대체 SwiftUI에서는 어떻게 노피티케이션 센터를 활용할까요?

    정말 이번 포스팅은 간단합니다.

    순식간에 슉~하고 끝나버리니 눈 크게 뜨고 보셔야 됩니다👀

    아, 참고로 이전에 포스팅했던 스크린샷 캡쳐/녹화 감지 및 방지에 대해 UIKit으로 구현한걸 SwiftUI의

    NotificationCenter를 통해 구현하는 예제로 보겠습니다👍🏻

     

    NotificationCenter 생성

    import SWiftUI
    
    struct mainView: View {
      let screenCapturePublisher = NotificationCenter.default.publisher(for: NSNotification.Name(UIApplication.userDidTakeScreenshotNotification.rawValue))
      let screenRecordPublisher = NotificationCenter.default.publisher(for: NSNotification.Name(UIScreen.capturedDidChangeNotification.rawValue))
      ...
      }

    이렇게 어떤 노티피케이션을 발생시킬 지 생성하여 상수로 가져갑니다.

    물론 이부분을 생략하고 이후 리시브 받는곳에서 해당 부분 선언을 한번에 가져가도 되지만

    코드의 복잡성을 줄이기 위해 위와 같이 분리해줍니다.

     

    Action 생성

    var body: some View {
       VStack {
       ...
       }
       .onReceive(screenCapturePublisher) { _ in
         viewStore.send(.setDetectScreenCaptureAlert)
       }
       .onReceive(screenRecordPublisher) { _ in
         viewStore.send(.setDetectScreenRecordAlert)
       }
    }

    이런식으로 해당 생성한 노티피케이션의 조건에 부합하여 발동되면 onRecieve를 받아 액션을 취해줄 수 있도록 해줍니다.

     

    정말 간단하죠?

    다양하게 addObserver를 통해 선언해주고 심어줄 수도 있지만 저는 위와 같이 해주었습니다.

    이번 포스팅은 추석연휴을 맞이하여 너무 귀찮지만 간단하게라도 해보자! 라는 생각으로 저의 메모라 보시면 되겠습니다..🤓

    참고자료를 남겨둘테니 다양한 사례들을 봐보는것도 방법일것 같습니다👍🏻

     

    [참고자료]

    https://stackoverflow.com/questions/58818046/how-to-set-addobserver-in-swiftui

    'SwiftUI' 카테고리의 다른 글

    ActivityView in SwiftUI  (0) 2021.11.29
    Rotation Animation  (0) 2021.11.21
    NavigationLink  (0) 2021.09.11
    Overlay & ZStack  (2) 2021.09.10
    SwiftUI  (0) 2021.04.14
Designed by Tistory.