QLPreviewController 的捕获屏幕导致 iOS 6 中的问题 [英] Capturing Screen of QLPreviewController causing problems in iOS 6

查看:72
本文介绍了QLPreviewController 的捕获屏幕导致 iOS 6 中的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在 Apples 技术说明网站上,他们发布了用于截屏的代码.一切正常,除了它不捕获在 iOS 6 下使用 QLPreviewController 预览的文件.

On Apples Technical notes site, they posted code to screen capture. Everything works, except it does not capture files that are being previewed using QLPreviewController under iOS 6.

我想知道他们是否正在使用一些新的 OpenGL ES 来渲染文件预览以使其无法捕获?理论上,这段代码应该可以捕获屏幕上的任何内容吧??

I'm wondering if they are using some new OpenGL ES to render the file preview so that it could not capture? In theory, this piece of code should be able to capture anything on screen right??

来自 http://developer.apple.com/library/ios/#qa/qa1703/_index.html

- (UIImage*)screenshot 
{
// 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();

UIGraphicsEndImageContext();

return image;
}

推荐答案

这听起来并不相似,但这实际上不起作用,原因与它不起作用的原因相同:iOS 6 UIGestures (Tap) 停止使用 QLPreviewController

this doesnt sound similiar but this actually doesnt work for the same reason that this doesnt work: iOS 6 UIGestures (Tap) stops working with QLPreviewController

从 ios 6 开始,QLPreviewController 实际上是一个完全独立的应用程序(独立的进程和一切)

since ios 6 the QLPreviewController is actually a completely seperate app (seperate process and everything)

=> 所以当你按下它时,你的整个应用程序都会移动到 bg,包括它的窗口.

=> so when you push that, your whole app moves to the bg, including its window.

=> QlController 从来都不是你的窗口的一部分

=> QlController is never really part of your window

这篇关于QLPreviewController 的捕获屏幕导致 iOS 6 中的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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