如何在 iOS 上检测屏幕截图以阻止内容(类似于 WhatsApp 查看一次照片)

Ale*_*toc 7 screenshot ios whatsapp swift

我试图模仿 WhatsApp 在拍摄“查看一次”照片的屏幕截图时所做的事情,即为敏感内容添加叠加层(见下图)

从我在文档中看到的,我们只有在截图才会收到通知。

我想知道他们是如何检测何时拍摄屏幕截图以添加此叠加层的

Whatsapp 截屏时会阻止敏感内容

最后,如果用户尝试录制屏幕,我认为此通知足以添加叠加层,但我不知道当他们截屏时该怎么做。

Sre*_*tan 2

我认为最好的解决方案是使用此扩展来阻止屏幕截图。

extension UIView {
    
    func makeSecure() {
        DispatchQueue.main.async {
            let field = UITextField()
            field.isSecureTextEntry = true
            self.addSubview(field)
            field.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
            field.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
            self.layer.superlayer?.addSublayer(field.layer)
            field.layer.sublayers?.first?.addSublayer(self.layer)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如何使用它:

let yourView = UIView()
yourView.makeSecure()
Run Code Online (Sandbox Code Playgroud)

它将阻止用户截取屏幕截图或记录特定视图。

如果您需要在用户尝试截图或录制时显示占位符,请检查此存储库。

示例代码: https: //github.com/kuttz/SecureYourView

结果: https: //github.com/kuttz/DemosAndScreenShots/blob/main/SecureYourView/Demo.gif