Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Structures and Classes
- SWIFT
- Info.plist
- UIResponder
- contentInset
- @available
- Failed to register bundle identifier
- NotificationCenter
- Mock
- 아이폰
- Codegen
- viewcontroller
- 야곰아카데미
- IOS
- View Life Cycle
- NumberFormatter
- 독서후기
- delegation
- 부트캠프
- 독후감
- 책후기
- Modality
- human interface guidelines
- SWIFTUI
- roundingMode
- 스위프트
- Navigation
- 스타트업주니어로살아남기
- xcode
- mvvm
Archives
- Today
- Total
호댕의 iOS 개발
[iOS] 사용자가 캡쳐를 했는지 알 수 있다?! 본문
무신사에서도 보면 상품 상세 화면이나 이벤트 화면에서 캡쳐를 하는 경우 상단에 공유를 할 수 있도록 하는 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() {
// 캡쳐를 했을 때 해야 하는 동작 구현
}
}
이렇게 하면 사용자가 캡쳐했을 때 해야하는 동작을 구현할 수 있다!
'Software Engineering > iOS' 카테고리의 다른 글
[Swift] Opaque Type (0) | 2023.09.13 |
---|---|
[Crashlytics] 크래쉬가 발생하지 않았을 때에도 로그를 보내기 (0) | 2023.09.09 |
[iOS] 위젯 도입기 - UserDefaults에 저장된 값 Widget Extension에 공유하기 (AppGroup) (0) | 2023.07.31 |
[iOS] 위젯 도입기 - 진짜 도입만 해보려했는데 처음부터 막혔다...!? (2) | 2023.07.26 |
[Xcode] 자잘한 XCode 이슈 (There is no XCFramework found at ~ / Rosetta 설정) (0) | 2023.07.25 |
Comments