我的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都低于此值。
来自该计划
用我的手机拍下。
我是否需要强制渲染场景工具包?如果是这样的话?有什么帮助吗?
有一个确认的错误(雷达编号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();
答案 0 :(得分:3)
从iOS 7开始捕获视图的推荐方法是使用drawViewHierarchyInRect:afterScreenUpdates:
(或者在文档中捕获视图快照下列出的其他方法之一)。这会捕获CALayer内容中没有的内容,我认为这些内容包括SceneKit呈现的OpenGL内容。
请注意,如果您只需捕获SceneKit视图而不是其他视图层次结构,则可以使用SCNView
方法snapshot
。