有没有办法禁用屏幕录制?或者可以通过配置文件来实现吗?或者是否有任何第三方库可用?
NotificationCenter.default.addObserver(self, selector: #selector(preventScreenRecording), name: NSNotification.Name.UIScreenCapturedDidChange, object: nil)
创建一个主视图内的子视图并避免这种情况。
(void) preventScreenRecording {
if (@available(iOS 11.0, *)) {
BOOL isCaptured = [[UIScreen mainScreen] isCaptured];
if (isCaptured) {
self.blockView.hidden = false;
}
else {
self.blockView.hidden = true;
}
}
UIScreen.isCaptured
属性,如果设置为 true
,则显示一些闪屏屏幕。capturedDidChangeNotification
通知,并在 UIScreen.isCaptured
设置为 true
时执行相同操作(显示闪屏屏幕)。Swift 4及以上版本
您只需在Appdelegate.swift页面进行以下更改。
当用户尝试录制屏幕时,它会自动在应用程序顶部添加一个模糊视图。
weak var screen : UIView? = nil
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
NotificationCenter.default.addObserver(self, selector: #selector(preventScreenRecording), name: UIScreen.capturedDidChangeNotification, object: nil)
return true
}
@objc func preventScreenRecording() {
let isCaptured = UIScreen.main.isCaptured
print("isCaptured: \(isCaptured)")
if isCaptured {
blurScreen()
}
else {
removeBlurScreen()
}
}
func blurScreen(style: UIBlurEffect.Style = UIBlurEffect.Style.regular) {
screen = UIScreen.main.snapshotView(afterScreenUpdates: false)
let blurEffect = UIBlurEffect(style: style)
let blurBackground = UIVisualEffectView(effect: blurEffect)
screen?.addSubview(blurBackground)
blurBackground.frame = (screen?.frame)!
window?.addSubview(screen!)
}
func removeBlurScreen() {
screen?.removeFromSuperview()
}
sharedRecorder.stopRecording( handler: { previewViewController, error in
if let error = error {
print("\(error.localizedDescription)")
}
if UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.pad {
previewViewController?.modalPresentationStyle = UIModalPresentationStyle.popover
previewViewController?.popoverPresentationController?.sourceRect = CGRect.zero
previewViewController?.popoverPresentationController?.sourceView = self.view
}
if previewViewController != nil {
self.previewViewController = previewViewController
previewViewController?.previewControllerDelegate = self
}
self.present(previewViewController!, animated: true, completion: nil)
})
return
}
https://developer.apple.com/documentation/replaykit/rpscreenrecorder/1620990-stoprecording
self.view.backgroundColor = UIColor.red
怎么样?还是其他什么? - PPShein