スクリーンショットの検出についての記事。
紹介されていた ShotBlocker
検出する為のライブラリとサンプルプログラムが提供されている。
こんな感じで使う。
[[ShotBlocker sharedManager] detectScreenshotWithImageBlock:^(UIImage *screenshot) { NSLog(@"Screenshot! %@", screenshot); }];
検出方法は単純で、カメラロールをタイマーで監視するというもの。新しい写真が追加され、かつそのサイズがスクリーンサイズと同じであればスクリーンショットとみなす。力技ではあるものの、非公開APIを使うわけでも無いので使えるテクニックだと思われる。
記事ではもう一つ紹介されていた。
要旨は(和訳が間違っていないとして...)
・iOSでは、スクリーンショットを撮影する時には全てのタッチをキャンセルする
・このキャンセルを捕捉することができれば、スクリーンショットが検出できる
実装としては UILongPressGestureRecognizerでキャンセルイベントを処理すれば良いとのこと。
ただこの辺り少し試行錯誤したがキャンセルイベントが取れる実装がわからなかった。
↑もし方法を御存知の方がいたら是非情報をお寄せください。
他Stackoverflowでは Darwin Notification : PictureWasTakenNotification を使う意見が出ていた。真偽は不明。
iphone - How to detect if user did a screenshot with home+power in iOS? - Stack Overflow
※オチは無しです