首先,我们需要判断目前屏幕是否正在进行录制,然后注册录屏和截屏的通知进行相应的事件处理。
//检查是否“屏幕录制中”
let screen = UIScreen.main
if screen.isCaptured {
self.screenshotAlert()
}
添加录屏和截图的通知
NotificationCenter.default.addObserver(self,
selector: #selector(screenshotAlert),
name: UIApplication.userDidTakeScreenshotNotification,
object: nil)
NotificationCenter.default.addObserver(self,
selector: #selector(screenshotAlert),
name: UIScreen.capturedDidChangeNotification,
object: nil)
添加要处理的信息
@objc func screenshotAlert() {
let alert = UIAlertController.init(title: "提示",
message: "[安全提醒]不要截图,录屏或分享给他人以保障账户安全。",
preferredStyle: .alert)
let cancleAction = UIAlertAction.init(title: "好的",
style: .cancel,
handler: nil)
alert.addAction(cancleAction)
self.present(alert, animated: true, completion: nil)
}
这样不能防止截图和录屏,只能做提醒使用。如果需要防止截图到敏感信息可以使用系统的UITextField作为父视图 凡是添加到这个视图上的子视图都不能被截图获取到。
/// 防止截图的父层view; 凡是放在这个视图上的子视图都能防止截图
/// - Returns:
public func makeSecView() -> UIView {
let field = UITextField()
field.isSecureTextEntry = true
guard let view = field.subviews.first else {
return UIView()
}
view.subviews.forEach { $0.removeFromSuperview() }
view.isUserInteractionEnabled = true
return view
}