L'application Snapchat , sur l'App Store, est une application qui vous permet de partager des images avec une auto-destruction sur elles. Vous ne pouvez voir les photos que pendant X secondes. Si vous essayez de prendre une capture d'écran pendant que l'image est affichée à l'aide de la combinaison de touches d'alimentation principale, il indiquera à l'expéditeur que vous avez essayé de prendre une capture d'écran.
Quelle partie du SDK vous permet de détecter que l'utilisateur prend une capture d'écran? Je ne savais pas que c'était possible.
ios
screenshot
moi2
la source
la source
Réponses:
J'ai trouvé la réponse !! Prendre une capture d'écran interrompt toutes les touches qui sont sur l'écran. C'est pourquoi Snapchat nécessite de tenir pour voir l'image. Référence: http://tumblr.jeremyjohnstone.com/post/38503925370/how-to-detect-screenshots-on-ios-like-snapchat
la source
Depuis iOS 7, les autres réponses ne sont plus vraies. Apple a fait en sorte qu'il
touchesCancelled:withEvent:
ne soit plus appelé lorsque l'utilisateur prend une capture d'écran.Cela casserait complètement Snapchat, donc quelques bêtas dans une nouvelle solution ont été ajoutés. Désormais, la solution est aussi simple que d'utiliser NSNotificationCenter pour ajouter un observateur à UIApplicationUserDidTakeScreenshotNotification .
Voici un exemple:
Objectif c
Rapide
la source
touchesCancelled:withEvent:
devrait vous permettre de détecter une capture d'écran sur toutes les versions (récentes) d'iOS.Voici comment faire dans Swift avec des fermetures:
Swift 4.2
Ceci est inclus en tant que fonction standard dans:
https://github.com/goktugyil/EZSwiftExtensions
Avertissement: c'est mon dépôt
la source
Dernier SWIFT 3 :
Dans viewDidLoad , appelez cette fonction
cependant,
fonctionne parfaitement bien. Je ne vois aucun point de mainQueue ...
la source
Il semble qu'il n'y ait aucun moyen direct de le faire pour détecter si l'utilisateur a appuyé surhome + power button
. De ce fait , c'était possible plus tôt en utilisant la notification Darwin, mais cela ne fonctionne plus. Puisque Snapchat le fait déjà, je suppose qu'ils vérifient l'album photo de l'iPhone pour détecter si une nouvelle image a été ajoutée entre ces 10 secondes, et d'une certaine manière, ils comparent avec l'image actuelle affichée. Peut-être qu'un traitement d'image est effectué pour cette comparaison. Juste une pensée, vous pouvez probablement essayer d'élargir cela pour que cela fonctionne. Vérifiez ceci pour plus de détails .Éditer:
On dirait qu'ils pourraient détecter l'événement d'annulation UITouch (la capture d'écran annule les touches) et afficher ce message d'erreur à l'utilisateur selon ce blog: Comment détecter les captures d'écran sur iOS (comme SnapChat)
Dans ce cas, vous pouvez utiliser la
– touchesCancelled:withEvent:
méthode pour détecter l'annulation UITouch pour le détecter. Vous pouvez supprimer l'image dans cette méthode déléguée et afficher une alerte appropriée à l'utilisateur.la source
Home + Lock
boutons, le système d'exploitation agit immédiatement comme si aucun doigt ne touchait l'écran. Peut-être que cela se produit sans untouchesEnded:withEvent
(ou un rappel similaire) comme cela se passerait normalement, alors peut-être qu'ils peuvent surveiller ce modèle unique d'événements? Je suis peut-être totalement sur la mauvaise voie, mais c'est ma seule théorie à ce stade.Swift 4+
en utilisant cet observateur, vous pouvez savoir quand l'utilisateur prend une capture d'écran, mais vous ne pouvez pas l'empêcher.
la source
Exemples de Swift 4
Exemple # 1 utilisant la fermeture
Exemple # 2 avec sélecteur
la source