iPhone のホームボタンとロックボタン同時押しでのスクリーンショットを検出する UIApplicationUserDidTakeScreenshotNotification
が iOS 7 で追加されている。
これを使えばスクリーンショットを検出できる。
[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationUserDidTakeScreenshotNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) { // user did take screenshot }];
この通知はスクリーンショットの撮影後に送られてくるので、これをトリガーにして画面の表示内容を変えたり隠したりしても意味が無い。
また通知の object
プロパティは UIApplication
のインスタンスで userInfo
プロパティは空になっているため、撮影されたスクリーンショットに関する情報は取得できない。
さらに、この通知のタイミングで AssetsLibrary を用いてユーザのカメラロールを取得してもまだスクリーンショットはカメラロールに追加されていない。
もしアプリのスクリーンショットを撮らせないように実装する必要がある場合、この通知をトリガーにしてアプリの動作を止めるといった手法が考えられる。