banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

iOS开发之APP进入后台禁止自动截图

iOS 在 7.0 以后,APP 进入后台后会把当前 APP 的 Window 状态记录,并对 Window 进行截图操作,会在 APP 的 Sandbox 的 Library\Caches\Snapshots\xxxx.xxx.xxx 文件夹中增加以下几个文件。这有可能会造成用户敏感数据的泄密。 UIApplicationAutomaticSnapshotDefault-LandscapeLeft.png UIApplicationAutomaticSnapshotDefault-LandscapeRight.png UIApplicationAutomaticSnapshotDefault-LandscapeLeft@2x.png UIApplicationAutomaticSnapshotDefault-LandscapeRight@2x.png

解决办法: 1. 将文件夹清空后设置为只读,文件将不能被写入。本方法需要越狱情况下使用。

system("chmod 444 Library\Caches\Snapshots\xxxx.xxx.xxx\* -R");

2. 重写 UIApplication 的_saveSnapshotWithName。本方法需要越狱情况下使用。

@interface UIApplication(NoSaveSnapshotWithName)

-(void) _saveSnapshotWithName:(NSString *)name;

@end

@implementation UIApplication
-(void) _saveSnapshotWithName:(NSString *)name
{
return;
}

@end

3. 在 applicationDidEnterBackground 时,将 window 的 hidden 属性设置为 YES, 在 applicationWillEnterForeground 时,将 window 的 hidden 属性设置为 NO。 此时的截图将会是一片黑色,什么也看不到。如果不喜欢黑色,在 window 中添加一个全屏的 Subview 就可以设置自己想要的内容。

//- (void)applicationWillResignActive:(UIApplication *)application
//{
// self.window.hidden = YES;
//}

  • (void)applicationDidEnterBackground:(UIApplication *)application
    {
    self.window.hidden = YES;
    }

  • (void)applicationWillEnterForeground:(UIApplication *)application
    {
    self.window.hidden = NO;
    }

//- (void)applicationDidBecomeActive:(UIApplication *)application
//{
// self.window.hidden = NO;
//}

补充,如果要在两次点击 HOME 键或者四指收起时也让画面全 % E

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.