在拍摄之前通知或检测屏幕截图?

时间:2010-01-23 03:26:52

标签: iphone screenshot detection notifications

是否有通知或其他机制被告知用户正在使用家庭/电源按钮截屏?

我见过关于想要禁用屏幕截图的线程,但这不是我想要做的。

我有一位摄影师客户,他担心他的作品将通过用户截图进行复制,我认为如果有机会在拍摄截图之前在图像上添加水印,这将减轻他的恐惧。

5 个答案:

答案 0 :(得分:6)

这是一种可行的方法,虽然它完全违背用户界面指南我敢肯定。如果您强制用户将手指放在屏幕上以显示图像,那么我认为他们无法创建屏幕截图。因为只要您按下主页+锁定键来实际截取屏幕截图,屏幕就会表现得好像没有手指触摸它。尝试在主屏幕之间移动时截取屏幕截图,看看我的意思。

通过任何方式都不是一个完美的解决方案,但是如果你真的很聪明而没有从用户体验中减少太多(尽管这是一个艰难的挑战),你也可以将它用于你的应用程序设计中。不过,我相信这可以让您在不允许用户截取屏幕截图的情况下显示图片/照片。

答案 1 :(得分:5)

当用户截取屏幕截图时,将发送PictureWasTakenNotification达尔文通知。但是,在截屏后,会发送

(在截屏之前不会发送任何通知。)

答案 2 :(得分:4)

自iOS 7起,UIApplicationUserDidTakeScreenshotNotification存在。所以做这样的事情应该检测屏幕截图:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userDidTakeScreenshot) name:UIApplicationUserDidTakeScreenshotNotification object:nil];
}

- (void)userDidTakeScreenshot {
    // Screenshot taken, act accordingly.
}

最后,不要忘记删除观察者:

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationUserDidTakeScreenshotNotification object:nil];
}

答案 3 :(得分:0)

真正需要的是在实际屏幕捕获发生之前发送的通知。一种委托方法或一些其他方法,可以在应用程序发生之前为应用程序提供重新绘制内容的屏幕截图机会。

并且没有。

答案 4 :(得分:0)

使用此回答,您在进行屏幕截图后会收到通知。

iOS 11和Swift 4

三个简单步骤:-

1。。将以下观察者添加到ViewController或您想要的任何其他地方

NotificationCenter.default.addObserver(self, selector: #selector(screenShotTaken(notification:)), name: NSNotification.Name.UIApplicationUserDidTakeScreenshot, object: nil)

2。。将在截取屏幕快照后触发示例方法(如下)

@objc func screenShotTaken(notification: Notification) {
        print(notification)
        print("Screenshot has taken, do something you want ")
     }

3。。删除观察者(在deinit中删除观察者的好方法)

deinit {
        NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIApplicationUserDidTakeScreenshot, object: nil)
    }