iOS检测截图?

App Store上的应用程序Snapchat是一个应用程序,可以让你分享图片,自我毁灭。 您只能查看X秒的图片。 如果您尝试使用家用电源组合键显示图片时截取屏幕截图,则会告诉发件人您试图截取屏幕截图。

SDK的哪个部分可以让你检测到用户正在截图? 我不知道这是可能的。

我find了答案! 截屏会中断屏幕上的任何触摸。 这就是为什么snapchat需要持有看到的图片。 参考: http : //tumblr.jeremyjohnstone.com/post/38503925370/how-to-detect-screenshots-on-ios-like-sidual

从iOS 7开始,其他答案不再是真实的。 苹果已经使它touchesCancelled:withEvent:当用户截图时不再被调用。

这将完全打破Snapchat,所以添加了一个新的解决scheme的几个testing版。 现在,解决scheme就像使用NSNotificationCenter将观察者添加到UIApplicationUserDidTakeScreenshotNotification一样简单。

这是一个例子:

目标C

 NSOperationQueue *mainQueue = [NSOperationQueue mainQueue]; [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationUserDidTakeScreenshotNotification object:nil queue:mainQueue usingBlock:^(NSNotification *note) { // executes after screenshot }]; 

迅速

 NotificationCenter.default.addObserver( forName: .UIApplicationUserDidTakeScreenshot, object: nil, queue: .main) { notification in //executes after screenshot } 

inheritance人如何在Swift中完成闭包:

 func detectScreenShot(action: () -> ()) { let mainQueue = NSOperationQueue.mainQueue() NSNotificationCenter.defaultCenter().addObserverForName(UIApplicationUserDidTakeScreenshotNotification, object: nil, queue: mainQueue) { notification in // executes after screenshot action() } } detectScreenShot { () -> () in print("User took a screen shot") } 

这包括在一个标准的function:

https://github.com/goktugyil/EZSwiftExtensions

免责声明:它是我的回购

最新的SWIFT 3

 func detectScreenShot(action: @escaping () -> ()) { let mainQueue = OperationQueue.main NotificationCenter.default.addObserver(forName: .UIApplicationUserDidTakeScreenshot, object: nil, queue: mainQueue) { notification in // executes after screenshot action() } } 

viewDidLoad中 ,调用这个函数

 detectScreenShot { () -> () in print("User took a screen shot") } 

然而,

 NotificationCenter.default.addObserver(self, selector: #selector(test), name: .UIApplicationUserDidTakeScreenshot, object: nil) func test() { //do stuff here } 

工作完全正常。 我没有看到mainQueue的任何点…

看起来像没有直接的方法来做到这一点来检测用户是否已经点击home + power button 按照这个 ,通过使用达尔文的通知可能更早,但它不再工作。 由于snapchat已经在这样做了,我的猜测是他们正在检查iPhone相册,以检测在这10秒钟之间是否添加了新的图片,并在某种程度上与当前显示的图片进行比较。 可能是一些image processing完成这个比较。 只是一个想法,可能你可以尝试扩大这个工作。 检查这个更多细节 。

编辑:

看起来像他们可能会检测到UITouch取消事件(屏幕捕获取消触摸),并显示此错误消息给该用户的博客: 如何检测iOS上的截图(如SnapChat)

在这种情况下,您可以使用– touchesCancelled:withEvent:方法来检测UITouch的取消来检测。 您可以在此委托方法中删除图像,并向用户显示适当的警报。

 - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesCancelled:touches withEvent:event]; NSLog(@"Touches cancelled"); [self.imageView removeFromSuperView]; //and show an alert to the user }