¿Se está notificando o detectando una captura de pantalla?

¿Hay alguna notificación u otro mecanismo para informar que el usuario está tomando una captura de pantalla con los botones de inicio / encendido?

He visto hilos sobre querer deshabilitar la toma de capturas de pantalla, pero eso no es lo que estoy buscando hacer.

Tengo un cliente fotógrafo preocupado de que sus trabajos sean copiados por los usuarios que toman capturas de pantalla y pensé que si había una oportunidad de poner una marca de agua en la imagen antes de que se tomara la captura de pantalla, eso aliviaría sus temores.

Esta es una manera que podría funcionar, aunque estoy totalmente en contra de las pautas de la interfaz de usuario. Si fuerza al usuario a colocar el dedo en la pantalla para que se muestre la imagen, entonces no creo que puedan crear capturas de pantalla. Porque tan pronto como presiona las teclas de inicio + locking para tomar la captura de pantalla, la pantalla parece comportarse como si no hubiera dedos tocándola. Intente tomar una captura de pantalla mientras se mueve entre las pantallas de inicio para ver a qué me refiero.

No es una solución perfecta de ninguna manera, pero es posible que pueda utilizarla en el diseño de su aplicación si es realmente inteligente sin que eso le resta demasiado valor a la experiencia del usuario (¡un desafío difícil!). Sin embargo, creo que esto puede permitirle mostrar obras de arte / fotos sin permitir que los usuarios tomen capturas de pantalla.

La notificación PictureWasTakenNotification Darwin se enviará cuando el usuario tome una captura de pantalla. Sin embargo, esto se envía después de que se toma la captura de pantalla.

(No se enviarán notificaciones antes de que se tome la captura de pantalla).

Desde iOS 7 existe UIApplicationUserDidTakeScreenshotNotification . Entonces, hacer algo como esto debería detectar las capturas de pantalla:

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userDidTakeScreenshot) name:UIApplicationUserDidTakeScreenshotNotification object:nil]; } - (void)userDidTakeScreenshot { // Screenshot taken, act accordingly. } 

Finalmente, no olvides quitar al observador:

 - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationUserDidTakeScreenshotNotification object:nil]; } 

Lo que realmente se necesita es una notificación que se envía antes de que ocurra la captura de pantalla real. Un método de delegado u otro medio para darle a la aplicación una oportunidad de captura de pantalla en vuelo para volver a dibujar su contenido antes de que suceda.

Y no hay uno.

AL USAR ESTA RESPUESTA, RECIBIR NOTIFICACIÓN DESPUÉS DE TOMAR LA PANTALLA DE LA PANTALLA.

iOS 11 y Swift 4

Tres pasos simples: –

1. Agregue el siguiente 👇 observador a su ViewController o cualquier otro lugar que desee

 NotificationCenter.default.addObserver(self, selector: #selector(screenShotTaken(notification:)), name: NSNotification.Name.UIApplicationUserDidTakeScreenshot, object: nil) 

2. El método de método de ejemplo (below👇) se activará cuando se haya tomado la captura de pantalla

 @objc func screenShotTaken(notification: Notification) { print(notification) print("Screenshot has taken, do something you want ") } 

3. Retire a su observador (buena manera de eliminar al observador en el ataque)

 deinit { NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIApplicationUserDidTakeScreenshot, object: nil) }