Aplikasi Snapchat , di App Store, adalah aplikasi yang memungkinkan Anda berbagi gambar dengan penghancuran sendiri. Anda hanya dapat melihat foto selama X detik. Jika Anda mencoba mengambil tangkapan layar saat gambar ditampilkan menggunakan kombo tombol daya rumah, ia akan memberi tahu pengirim bahwa Anda mencoba mengambil tangkapan layar.
Bagian mana dari SDK yang memungkinkan Anda mendeteksi bahwa pengguna mengambil tangkapan layar? Saya tidak tahu ini mungkin.
ios
screenshot
saya 2
sumber
sumber
Jawaban:
Saya menemukan jawabannya !! Mengambil tangkapan layar akan mengganggu setiap sentuhan yang ada di layar. Inilah sebabnya mengapa snapchat membutuhkan penahan untuk melihat gambar. Referensi: http://tumblr.jeremyjohnstone.com/post/38503925370/how-to-detect-screenshots-on-ios-like-snapchat
sumber
Pada iOS 7 jawaban lain tidak lagi benar. Apple telah membuatnya jadi
touchesCancelled:withEvent:
tidak lagi dipanggil saat pengguna mengambil tangkapan layar.Ini akan memecah Snapchat sepenuhnya secara efektif, sehingga beberapa beta dalam solusi baru ditambahkan. Sekarang, solusinya semudah menggunakan NSNotificationCenter untuk menambahkan pengamat ke UIApplicationUserDidTakeScreenshotNotification .
Ini sebuah contoh:
Tujuan C
Cepat
sumber
touchesCancelled:withEvent:
seharusnya memungkinkan Anda untuk mendeteksi tangkapan layar di semua versi (terkini) iOS.Inilah cara melakukan di Swift dengan penutupan:
Cepat 4.2
Ini termasuk sebagai fungsi standar di:
https://github.com/goktugyil/EZSwiftExtensions
Penafian: Ini repo saya
sumber
SWIFT 3 terbaru :
Di viewDidLoad , panggil fungsi ini
Namun,
bekerja dengan sangat baik. Saya tidak melihat poin dari mainQueue ...
sumber
Sepertinya tidak ada cara langsung untuk melakukan ini untuk mendeteksi jika pengguna telah mengetukhome + power button
. Sesuai ini , itu mungkin sebelumnya dengan menggunakan notifikasi darwin, tetapi tidak berfungsi lagi. Karena snapchat sudah melakukannya, tebakan saya adalah mereka sedang memeriksa album foto iPhone untuk mendeteksi apakah ada gambar baru yang ditambahkan di antara 10 detik ini, dan di suatu tempat mereka membandingkan dengan gambar saat ini yang ditampilkan. Mungkin beberapa pemrosesan gambar dilakukan untuk perbandingan ini. Hanya sebuah pemikiran, mungkin Anda dapat mencoba mengembangkan ini untuk membuatnya bekerja. Periksa ini untuk lebih jelasnya .Edit:
Sepertinya mereka mungkin mendeteksi acara pembatalan UITouch (Pengambilan layar membatalkan sentuhan) dan menampilkan pesan kesalahan ini kepada pengguna sesuai blog ini: Cara mendeteksi tangkapan layar di iOS (seperti SnapChat)
Jika demikian, Anda dapat menggunakan
– touchesCancelled:withEvent:
metode untuk merasakan pembatalan UITouch untuk mendeteksi hal ini. Anda dapat menghapus gambar dalam metode delegasi ini dan menunjukkan peringatan yang sesuai kepada pengguna.sumber
Home + Lock
tombol, OS segera bertindak seolah-olah tidak ada jari yang menyentuh layar. Mungkin ini terjadi tanpatouchesEnded:withEvent
(atau panggilan balik serupa) seperti biasanya, jadi mungkin mereka dapat memantau pola acara yang unik ini? Saya mungkin benar-benar di jalur yang salah, tetapi hanya itulah teori saya saat ini.Swift 4+
dengan menggunakan pengamat ini Anda bisa mengetahui kapan pengguna mengambil tangkapan layar, tetapi Anda tidak bisa mencegahnya.
sumber
Swift 4 Contoh
Contoh # 1 menggunakan penutupan
Contoh # 2 dengan pemilih
sumber