截取窗口的截图 [英] Take screenshot of the window

查看:96
本文介绍了截取窗口的截图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用此方法截取我的应用的屏幕截图:

I'm using this method to take a screenshot of my app:

+ (NSData*)TakeScreenshot 
{
    // Create a graphics context with the target size
    // On iOS 4 and later, use UIGraphicsBeginImageContextWithOptions to take the scale into consideration
    // On iOS prior to 4, fall back to use UIGraphicsBeginImageContext

    CGSize imageSize = [[UIScreen mainScreen]bounds].size;
    if (NULL != UIGraphicsBeginImageContextWithOptions)
        UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0);
    else
        UIGraphicsBeginImageContext(imageSize);

    CGContextRef context = UIGraphicsGetCurrentContext();

    // Iterate over every window from back to front
    for (UIWindow *window in [[UIApplication sharedApplication] windows]) 
    {
        if (![window respondsToSelector:@selector(screen)] || [window screen] == [UIScreen mainScreen])
        {
            // -renderInContext: renders in the coordinate space of the layer,
            // so we must first apply the layer's geometry to the graphics context
            CGContextSaveGState(context);
            // Center the context around the window's anchor point
            CGContextTranslateCTM(context, [window center].x, [window center].y);
            // Apply the window's transform about the anchor point
            CGContextConcatCTM(context, [window transform]);
            // Offset by the portion of the bounds left of and above the anchor point

            CGContextTranslateCTM(context,
                                  -[window bounds].size.width * [[window layer] anchorPoint].x,
                                  -[window bounds].size.height * [[window layer] anchorPoint].y);

            // Render the layer hierarchy to the current context
            [[window layer] renderInContext:context];

            // Restore the context
            CGContextRestoreGState(context);


        }
    }


    // Retrieve the screenshot image
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    NSData *imageData = UIImageJPEGRepresentation(image, 100);

    UIGraphicsEndImageContext();

    return imageData;
}

问题是,我没有看到状态栏。我只有一个没有状态栏的白色区域。如何使用状态栏和其他控件(如tabbar,导航栏等)截取整个屏幕的屏幕截图。

The problem is, I don't see the status bar. I'm getting only a white area without the status bar. How can I take a screenshot of the whole screen, with the status bar and other controls like tabbar, navigation bar and etc.

提前致谢!

推荐答案

没有公共方法可以让你截取整个屏幕(即状态栏)。有一个私人方法虽然 UIGetScreenImage 允许您使用实现此功能。但是,由于它是一种私有方法,如果您将应用程序提交到App Store,您的应用程序将被拒绝。

There is no public method which allows you to take a screenshot of the entire screen (i.e. with the status bar). There is a private method though UIGetScreenImage which allows you to use achieve this functionality. But, since it's a private method you will get your app rejected if you submit it to the App Store.

这篇关于截取窗口的截图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆