以编程方式从任何地方在iOS上截取屏幕截图

时间:2012-03-17 02:25:19

标签: objective-c ios xcode

我目前正在使用此代码捕获屏幕:

UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
    UIGraphicsBeginImageContextWithOptions(keyWindow.bounds.size, NO, [UIScreen mainScreen].scale);
else
    UIGraphicsBeginImageContext(keyWindow.bounds.size);

CGContextRef context = UIGraphicsGetCurrentContext();
[keyWindow.layer renderInContext:context];   
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

从Springboard可以正常工作,但在打开的应用程序中,没有创建图像。关键窗口和[UIScreen主屏幕]应该在任何地方工作,还是不应该?

我是否必须更具体,并以某种方式使用当前应用程序正在使用的特定窗口?

2 个答案:

答案 0 :(得分:0)

这可能是一个愚蠢的答案,但您确定在尝试捕获关键窗口时加载了视图吗?

HOpe这有帮助。

答案 1 :(得分:0)

这仅适用于Jailbroken iOS:

// fwd declare a private function
UIKIT_EXTERN CGImageRef UIGetScreenImage();

// grab screen image from framebuffer.
// this grabs everything: status bar included
CGImageRef ref = UIGetScreenImage();

// create a UIImage out of CoreGraphics object
// at this point img contains your screenshot
UIImage* img = [UIImage imageWithCGImage:ref];

// release temp object
CGImageRelease(ref);