我正在做一个项目,我们希望能够录制一个UIView。我的想法和实现是采取连续屏幕截图,并将他们存储在光盘上,然后在UIView完成后,结合所有的图像,以制作一部电影。现在,我正在使用UIImage来组合和制作一部电影。这似乎是一个相当缓慢的过程,我在网上读过一些东西,比如RecordMyScreen项目,但是使用了私有API,比如IOSurface等等。我只是想知道是否有一个快速的方法来拍摄屏幕截图。我需要每秒钟吃大约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获得这一点的方法?
无论如何,任何帮助都会很好!
谢谢
发布于 2014-09-18 11:53:53
从iOS 7开始就添加了新API,这将提供获取快照的有效方法。
snapshotViewAfterScreenUpdates:将视图呈现为具有不可修改内容的UIView
resizableSnapshotViewFromRect:afterScreenUpdates:withCapInsets:同样的事情,但是有可调整大小的嵌入
drawViewHierarchyInRect:afterScreenUpdates::如果您也需要绘制所有子视图(比如标签、按钮.)的话,也是一样的。
您可以将返回的UIView用于任何UI效果,也可以像需要导出时那样将其呈现到图像中。
你也可以试试这个,它对我有用。
- (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;
}https://stackoverflow.com/questions/25911765
复制相似问题