Cómo detectar capturas de pantalla en SwiftUI

Hace unos días, mientras usaba la app de LinkedIn, noté una funcionalidad interesante y sencilla: detectar cuando el usuario hace una captura de pantalla para mostrar un sheet con opciones para compartir un post.

LinkedIn mostrando un sheet cuando el usuario hace una captura de pantalla

Implementación de la notificación userDidTakeScreenshotNotification

Para implementar esta funcionalidad, necesitas utilizar la notificación UIApplication.userDidTakeScreenshotNotification, que es el identificador de este tipo de evento.

Conociendo el nombre de la notificación, usa el publisher de NotificationCenter para emitir una notificación cada vez que ocurra este evento de la siguiente manera:

NotificationCenter.default.publisher(for: UIApplication.userDidTakeScreenshotNotification)

Escuchando la notificación en SwiftUI

Luego, utiliza el modificador onReceive en tu vista de SwiftUI para escuchar las emisiones del publisher:

.onReceive(NotificationCenter.default.publisher(for: UIApplication.userDidTakeScreenshotNotification)) { _ in
}

Dentro del closure de onReceive, puedes ejecutar cualquier acción que desees, como mostrar un sheet, una alerta, entre otras opciones. A continuación, te muestro un ejemplo completo, similar a la funcionalidad de LinkedIn:

Ejemplo completo en SwiftUI

import SwiftUI
struct MyView: View {
@State private var isPresented = false
var body: some View {
Text("Hellow world!")
.onReceive(NotificationCenter.default.publisher(for: UIApplication.userDidTakeScreenshotNotification)) { _ in
isPresented = true
}
.sheet(isPresented: $isPresented) {
Text("Screenshot taken! 🫣")
.presentationDetents([.fraction(0.25)])
}
}
}

En este código, se utiliza la variable de estado isPresented para controlar la visibilidad del sheet. Cuando el usuario realiza una captura de pantalla, isPresented cambia a true y se muestra el sheet.

Pantalla de SwiftUI que muestra un sheet cuando el usuario realiza una captura de pantalla

Conclusión

Detectar capturas de pantalla en iOS con SwiftUI es una tarea sencilla gracias a UIApplication.userDidTakeScreenshotNotification y NotificationCenter. Con esta implementación, puedes agregar funcionalidades útiles, como mostrar opciones de compartir contenido o advertencias de seguridad.

Comparte este artículo

Subscríbete a nuestro Newsletter

Mantente al día en el mundo de las aplicaciones móviles con nuestro blog especializado.

Artículos semanales

Todas las semanas artículos nuevos sobre el mundo de las aplicaciones móviles.

No spam

No te enviaremos spam, solo contenido de calidad. Puedes darte de baja cuando quieras.

Contenido de calidad

Nada de contenido generado de manera automática usando ChatGPT.

Recomendaciones

Tips indispensables sobre mejores prácticas y metodologías.

© 2025 AsyncLearn