我正在努力检测我的应用中的屏幕截图,这是问题..
override func viewDidAppear(_ animated: Bool) {
let mainQueue = OperationQueue.main
NotificationCenter.default.addObserver(forName: NSNotification.Name.UIApplicationUserDidTakeScreenshot,
object: nil,
queue: mainQueue) { notification in
print("SCREENSHOT TAKEN")
}
}
override func viewDidDisappear(_ animated: Bool) {
NotificationCenter.default.removeObserver(self)
}
观察者工作正常,但它没有移除观察者,然后我可以得到大量的重复听众。我试图理解文档,但我不明白:/
谢谢!
答案 0 :(得分:1)
请勿在{{1}}中添加观察者。在viewDidAppear
中执行此操作。 viewDidLoad
可能会被多次调用,这意味着您可能会多次注册viewDidAppear
通知。
此外,您无需在iOS9 +中取消注册(UIApplicationUserDidTakeScreenshot
)。如果您在小于9的iOS版本上运行,我建议您在removeObserver
而不是deinit
取消注册。
viewDidDisappear
答案 1 :(得分:1)
您可以将观察者存储在私有变量中,然后在方法中将其删除,如:
private var screenshotObserver: Any?
override func viewDidAppear(_ animated: Bool) {
if screenshotObserver == nil {
let mainQueue = OperationQueue.main
screenshotObserver = NotificationCenter.default.addObserver(forName: NSNotification.Name.UIApplicationUserDidTakeScreenshot, object: nil, queue: mainQueue) { notification in
print("SCREENSHOT TAKEN")
}
}
}
override func viewDidDisappear(_ animated: Bool) {
if screenshotObserver != nil {
NotificationCenter.default.removeObserver(screenshotObserver)
screenshotObserver = nil
}
}