捕获屏幕与混合视图控制器,3d场景工具包,uiwebkit

时间:2015-02-25 19:14:26

标签: ios swift uiviewcontroller cgcontext scenekit

我的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都低于此值。

来自该计划

capture from program

用我的手机拍下。 capture from external 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();

1 个答案:

答案 0 :(得分:3)

从iOS 7开始捕获视图的推荐方法是使用drawViewHierarchyInRect:afterScreenUpdates:  (或者在文档中捕获视图快照下列出的其他方法之一)。这会捕获CALayer内容中没有的内容,我认为这些内容包括SceneKit呈现的OpenGL内容。

请注意,如果您只需捕​​获SceneKit视图而不是其他视图层次结构,则可以使用SCNView方法snapshot

但是,这些都不会反映你的手和手机。