首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在iOS 7多任务切换器中控制屏幕截图

在iOS 7多任务切换器中控制屏幕截图
EN

Stack Overflow用户
提问于 2013-09-23 20:37:00
回答 5查看 47.5K关注 0票数 99

我一直在努力寻找一些关于iOS 7中新的多任务切换器的信息,特别是当应用程序进入休眠状态时,操作系统会截图。

有没有办法完全关闭这个功能或截图?或者我可以完全隐藏这个应用程序而不让切换器看到?该应用程序需要在后台运行,但我们不想显示该应用程序的任何屏幕截图。

这个屏幕截图可能会带来安全风险,就像银行应用一样,任何人只要双击设备上的主页按钮,就可以看到你的卡号或账户摘要。

有谁对此有什么见解吗?谢谢。

EN

回答 5

Stack Overflow用户

发布于 2013-10-02 22:22:32

这是我为我的应用程序使用的解决方案:

正如汤米所说:你可以使用applicationWillResignActive。我所做的是用我的SplashImage制作一个UIImageView,并将其作为子视图添加到我的主窗口中-

代码语言:javascript
复制
(void)applicationWillResignActive:(UIApplication *)application
{
    imageView = [[UIImageView alloc]initWithFrame:[self.window frame]];
    [imageView setImage:[UIImage imageNamed:@"Portrait(768x1024).png"]];
    [self.window addSubview:imageView];
}

我使用这种方法代替了applicationDidEnterBackground,因为如果双击主页按钮,applicationDidEnterBackground将不会被触发,而applicationWillResignActive将被触发。我听到人们说,虽然它也可以在其他情况下触发,所以我仍然在测试它是否有问题,但到目前为止还没有!;)

以下是移除图像视图的步骤:

代码语言:javascript
复制
- (void)applicationDidBecomeActive:(UIApplication *)application
{
    if(imageView != nil) {
        [imageView removeFromSuperview];
        imageView = nil;
    }
}

希望这能有所帮助!

旁白:我在模拟器和真实设备上测试了这一点:它不会在模拟器上显示,但在真实设备上显示!

票数 32
EN

Stack Overflow用户

发布于 2013-11-18 12:45:25

这个快速而简单的方法将在iOS7或更高版本的应用程序切换器中的应用程序图标上方生成一个黑色快照。

首先,获取应用程序的key窗口(通常设置在application:didFinishLaunchingWithOptions中的AppDelegate.m中),并在应用程序即将进入后台时隐藏它:

代码语言:javascript
复制
- (void)applicationWillResignActive:(UIApplication *)application
{
    if(isIOS7Or8)
    {
        self.window.hidden = YES;
    }
}

然后,当你的应用程序再次激活时,取消隐藏你的应用程序的key窗口:

代码语言:javascript
复制
- (void)applicationDidBecomeActive:(UIApplication *)application
{
    if(isIOS7Or8)
    {
        self.window.hidden = NO;
    }
}

此时,查看应用程序切换器,并验证您是否在应用程序图标上方看到了一个黑色快照。我注意到,如果你在将应用程序移到后台后立即启动应用程序切换器,可能会有大约5秒的延迟,你会看到应用程序的快照(你想要隐藏的那个!),之后它会转换为全黑快照。我不知道延迟是怎么回事;如果有人有什么建议,请提出来。

如果您想在切换器中使用除黑色之外的其他颜色,您可以通过添加一个具有任意背景颜色的子视图来执行以下操作:

代码语言:javascript
复制
- (void)applicationWillResignActive:(UIApplication *)application
{
    if(isIOS7Or8)
    {
        UIView *colorView = [[[UIView alloc] initWithFrame:self.window.frame] autorelease];
        colorView.tag = 9999;
        colorView.backgroundColor = [UIColor purpleColor];
        [self.window addSubview:colorView];
        [self.window bringSubviewToFront:colorView];
    }
}

然后,当你的应用程序再次激活时,删除这个颜色子视图:

代码语言:javascript
复制
- (void)applicationDidBecomeActive:(UIApplication *)application
{
    if(isIOS7Or8)
    {
        UIView *colorView = [self.window viewWithTag:9999];
        [colorView removeFromSuperview];
    }
}
票数 15
EN

Stack Overflow用户

发布于 2014-10-21 11:58:58

如果仅在applicationWillResignActive函数中使用[self.window addSubview:imageView];,则此imageView不会涵盖UIAlertView、UIActionSheet或MFMailComposeViewController...

最佳解决方案是

代码语言:javascript
复制
- (void)applicationWillResignActive:(UIApplication *)application
{
    UIWindow *mainWindow = [[[UIApplication sharedApplication] windows] lastObject];
    [mainWindow addSubview:imageView];
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18959411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档