호댕의 iOS 개발

[iOS] 사용자가 캡쳐를 했는지 알 수 있다?! 본문

Software Engineering/iOS

[iOS] 사용자가 캡쳐를 했는지 알 수 있다?!

호르댕댕댕 2023. 8. 18. 18:15

무신사에서도 보면 상품 상세 화면이나 이벤트 화면에서 캡쳐를 하는 경우 상단에 공유를 할 수 있도록 하는 UI를 제공하고 있다. 

 

이를 구현하기 위해선 사용자의 캡쳐 이벤트를 받아서 이때 위 이미지처럼 UI를 띄워줘야 할 것이다. 

그럼 어떻게 이런 이벤트를 받을 수 있을까?!

 

캡쳐 이벤트 받기

이는 키보드가 나왔다가 dismiss되는 이벤트를 받는 것과 거의 유사하다. 

NotificationCenter를 활용하면 된다!! 

 

해당 이벤트의 이름은 아래 프로퍼티에 정의되어 있다. 

UIApplication.userDidTakeScreenshotNotification

 

이름만 봐도 스크린샷 찍었을 때 이벤트를 알려주게 생겼다. 

 

이후는 NotificationCenter를 사용하는 것과 동일하다. 

캡쳐 이벤트를 인식했으면 하는 View에 addObserver를 해놓고 View가 종료될 때 Observer를 remove해주면 된다. 

(정확한 시점은 처리해야 하는 상황에 따라서 넣어주면 된다)

 

해당 이벤트는 OS에서 인식을 하기 때문에 따로 이벤트를 post해줄 필요는 없다.

 

final class AViewController: UIViewController {
    init() {
    	NotificationCenter.default.addObserver(
            self
            selector: #selector(didTakeCapture),
            name: UIApplication.userDidTakeScreenshotNotification
            object: nil
        )
    }
    
    deinit() {
        NotificationCenter.default.removeObserver(
            self
            name: UIApplication.userDidTakeScreenshotNotification,
            object: nil
        )
    }
    
    @objc
    private func didTakeCapture() {
    	// 캡쳐를 했을 때 해야 하는 동작 구현
    }
}

이렇게 하면 사용자가 캡쳐했을 때 해야하는 동작을 구현할 수 있다!

Comments