我正在开展一个项目,我们希望能够录制UIView
。我已经实现的想法是连续拍摄屏幕并将它们存储在光盘上,然后在UIView
完成之后将所有图像组合起来制作电影。现在我正在使用UIImage
来合并制作电影。这似乎是一个非常缓慢的过程,我已经在线阅读了一些内容,比如RecordMyScreen项目,但它使用了像IOSurface等私有API。我只是想知道是否快速拍摄屏幕截图。我需要大约25秒。现在我正在做这样的事情:
UIGraphicsBeginImageContextWithOptions(self.captureView.frame.size, YES, 0.0);
// CGContextRef context = UIGraphicsGetCurrentContext();
// [self.captureView.layer renderInContext:context];
[self.captureView drawViewHierarchyInRect:weakSelf.captureView.bounds afterScreenUpdates:YES];
UIImage* screenShot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSLog(@"saving image");
[self saveImageToFolder:self.tempFolderPath image:screenShot];
这是在NSOperationBlock
中在后台执行的。保存到光盘也在另一个线程上完成。
我知道AVAssetWriterInputPixelBufferAdaptor
需要CVPixelBufferRef
来制作电影,所以我不确定是否可以直接从UIView
获取电影?
无论如何,任何帮助都会很棒!
由于
答案 0 :(得分:1)
自iOS 7以来添加了新的API,它应该提供有效的快照获取方式
snapshotViewAfterScreenUpdates
:将视图呈现为具有不可修改内容的UIView
resizableSnapshotViewFromRect:afterScreenUpdates:withCapInsets
:同样的事情,但有可调整大小的插图
drawViewHierarchyInRect:afterScreenUpdates
::同样的事情,如果您也需要绘制所有子视图(如标签,按钮......)
您可以使用针对任何UI效果返回的UIView
,或者将其呈现为您需要导出时的图像。
你也可以试试这个,它对我有用。
- (UIImage *) screenshot {
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, [UIScreen mainScreen].scale);
[self.view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}