iOS 7中的屏幕截图

时间:2014-09-18 11:43:47

标签: ios objective-c uiview

我正在开展一个项目,我们希望能够录制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获取电影?

无论如何,任何帮助都会很棒!

由于

1 个答案:

答案 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;
}