La aplicación Snapchat , en la App Store, es una aplicación que te permite compartir imágenes con una autodestrucción en ellas. Solo puedes ver las fotos durante X segundos. Si intentas tomar una captura de pantalla mientras se muestra la imagen usando el combo de la tecla de encendido, le indicará al remitente que intentaste tomar una captura de pantalla.
¿Qué parte del SDK le permite detectar que el usuario está tomando una captura de pantalla? No sabía que esto era posible.
ios
screenshot
me2
fuente
fuente
Respuestas:
¡Encontré la respuesta! Tomar una captura de pantalla interrumpe cualquier toque que esté en la pantalla. Esta es la razón por la cual Snapchat requiere esperar para ver la imagen. Referencia: http://tumblr.jeremyjohnstone.com/post/38503925370/how-to-detect-screenshots-on-ios-like-snapchat
fuente
A partir de iOS 7, las otras respuestas ya no son ciertas. Apple ha logrado que
touchesCancelled:withEvent:
ya no se llame cuando el usuario toma una captura de pantalla.Esto efectivamente rompería Snapchat por completo, por lo que se agregaron un par de versiones beta en una nueva solución. Ahora, la solución es tan simple como usar NSNotificationCenter para agregar un observador a UIApplicationUserDidTakeScreenshotNotification .
Aquí hay un ejemplo:
C objetivo
Rápido
fuente
touchesCancelled:withEvent:
debería permitirle detectar una captura de pantalla en todas las versiones (recientes) de iOS.Aquí está cómo hacer en Swift con cierres:
Swift 4.2
Esto se incluye como una función estándar en:
https://github.com/goktugyil/EZSwiftExtensions
Descargo de responsabilidad: es mi repositorio
fuente
Última SWIFT 3 :
En viewDidLoad , llame a esta función
Sin embargo,
Funciona totalmente bien. No veo ningún punto de mainQueue ...
fuente
Parece que no hay una forma directa de hacer esto para detectar si el usuario ha hecho tappinghome + power button
. Según esto , fue posible antes mediante el uso de la notificación de Darwin, pero ya no funciona. Dado que Snapchat ya lo está haciendo, supongo que están revisando el álbum de fotos del iPhone para detectar si hay una nueva imagen agregada entre estos 10 segundos, y de alguna manera se están comparando con la imagen actual que se muestra. Puede haber algún procesamiento de imagen para esta comparación. Solo un pensamiento, probablemente pueda intentar expandir esto para que funcione. Mira esto para más detalles .Editar:
Parece que podrían estar detectando el evento de cancelación de UITouch (la captura de pantalla cancela los toques) y mostrando este mensaje de error al usuario según este blog: Cómo detectar capturas de pantalla en iOS (como SnapChat)
En ese caso, puede utilizar el
– touchesCancelled:withEvent:
método para detectar la cancelación de UITouch para detectar esto. Puede eliminar la imagen en este método de delegado y mostrar una alerta apropiada al usuario.fuente
Home + Lock
botones, el sistema operativo actúa inmediatamente como si ningún dedo estuviera tocando la pantalla. Tal vez esto suceda sin unatouchesEnded:withEvent
(o una devolución de llamada similar) como lo haría normalmente, ¿entonces tal vez puedan monitorear este patrón único de eventos? Puedo estar totalmente en el camino equivocado, pero esa es mi única teoría en este momento.Swift 4+
Al usar este observador puede averiguar cuándo el usuario toma una captura de pantalla, pero no puede evitarlo.
fuente
Swift 4 Ejemplos
Ejemplo # 1 usando cierre
Ejemplo # 2 con selector
fuente