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() {
// 캡쳐를 했을 때 해야 하는 동작 구현
}
}
이렇게 하면 사용자가 캡쳐했을 때 해야하는 동작을 구현할 수 있다!