撮影前にスクリーンショットを通知または検出しますか?
ユーザーがホーム/電源ボタンでスクリーンショットを撮っていることを通知する通知またはその他のメカニズムはありますか?
スクリーンショットの撮影を無効にしたいというスレッドを見たことがありますが、それは私が探していることではありません。
私には、スクリーンショットを撮るユーザーによって彼の作品がコピーされるのではないかと心配している写真家のクライアントがいます。スクリーンショットを撮る前に画像に透かしを入れる機会があれば、彼の恐れを和らげると思いました。
これはうまくいくかもしれない方法ですが、それは私が確信しているユーザーインターフェースのガイドラインに完全に反します。画像を表示するためにユーザーに画面上に指を置くように強制すると、スクリーンショットを作成できないと思います。ホーム+ロックキーを押して実際にスクリーンショットを撮るとすぐに、画面は指が触れていないかのように動作するように見えます。ホーム画面間を移動しながらスクリーンショットを撮って、意味を確認してください。
決して完璧なソリューションではありませんが、ユーザーエクスペリエンスをあまり損なうことなく、本当に賢い場合は、アプリのデザインに組み込むことができるかもしれません(ただし、難しい課題です!)。それでも、これにより、ユーザーがスクリーンショットを撮ることを許可せずにアートワーク/写真を表示できるようになると思います。
PictureWasTakenNotification
Darwin通知は、ユーザーがスクリーンショットを撮ったときに送信されます。ただし、これは送信されます後スクリーンショットが撮影されます。
(通知は送信されません前スクリーンショットが撮影されました。)
IOS 7以降、UIApplicationUserDidTakeScreenshotNotification
が存在します。したがって、このようなことを行うと、スクリーンショットが検出されます。
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userDidTakeScreenshot) name:UIApplicationUserDidTakeScreenshotNotification object:nil];
}
- (void)userDidTakeScreenshot {
// Screenshot taken, act accordingly.
}
最後に、オブザーバーを削除することを忘れないでください。
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationUserDidTakeScreenshotNotification object:nil];
}
この回答を使用すると、スクリーンショットを撮った後に通知が届きます。
iOS11およびSwift 4
3つの簡単なステップ:-
1。次を追加しますか???? ViewControllerまたはその他の必要な場所へのオブザーバー
NotificationCenter.default.addObserver(self, selector: #selector(screenShotTaken(notification:)), name: NSNotification.Name.UIApplicationUserDidTakeScreenshot, object: nil)
2。サンプルメソッド(以下????)メソッドはスクリーンショットが撮られたときにトリガーされます
@objc func screenShotTaken(notification: Notification) {
print(notification)
print("Screenshot has taken, do something you want ")
}
。オブザーバーを削除します(deinitでオブザーバーを削除する良い方法)
deinit {
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIApplicationUserDidTakeScreenshot, object: nil)
}
本当に必要なのは、実際の画面キャプチャが行われる前に送信される通知です。グラブが発生する前にコンテンツを再描画するためのスクリーンショットを実行中の機会をアプリに与えるデリゲートメソッドまたはその他の手段。
そして、1つはありません。