使用混合视图控制器、3d 场景工具包、uiwebkit 捕获屏幕

Capturing screen with mixed view controllers, 3d scene kit, uiwebkit

我的 iPad 应用程序可以对显示的所有视图控制器进行屏幕截图,除了 3d scenekit VC。

这是我捕获屏幕的代码

  @IBAction func screenImage(sender: UIBarButtonItem) {

    //Create the UIImage
    UIGraphicsBeginImageContext(view.frame.size)
    view.layer.renderInContext(UIGraphicsGetCurrentContext())
    let screenshot: UIImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    //Save it to the camera roll
    UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil)

    //save to user documents access via iTunes
    CaptureOutput.saveImage(screenshot)

  }

我把截屏VC设为最高atIndex级别,其他的VC都在atIndex以下。

来自节目

用我的 phone 拍摄。

我需要强制渲染场景套件吗?如果是这样怎么办?有帮助吗?

有一个已确认的错误(雷达编号 17851775)

而且他们还提供了解决方法。他们建议,而不是:

UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0);
[self.view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:YES];
UIImage *im = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
/* Use im */

我应该这样做

UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *im = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

自 iOS 7 以来,推荐的捕获视图的方法是使用 drawViewHierarchyInRect:afterScreenUpdates: (或在文档中捕获视图快照下它旁边列出的其他方法之一)。这捕获了 CALayer 内容中没有的东西,我相信它包括由 SceneKit 渲染的 OpenGL 内容。

请注意,如果您只需要捕获 SceneKit 视图而不是它所在的视图层次结构的其余部分,则可以只使用 SCNView 方法 snapshot

不过,其中

None 会捕捉到您手的反射,phone。