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 }