我进行了很多搜索,但只找到两种方法来获取UIView的屏幕快照。
第一个renderInContext:我用了某种方式

CGContextRef context = [self createBitmapContextOfSize:CGSizeMake(nImageWidth, nImageHeight)];
CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, nImageHeight);
CGContextConcatCTM(context, flipVertical);
[self.layer setBackgroundColor:[UIColor clearColor].CGColor];
[self.layer renderInContext:context];
CGImageRef cgImage = CGBitmapContextCreateImage(context);
UIImage* background = [UIImage imageWithCGImage: cgImage];
CGImageRelease(cgImage);

我曾经用过的第二个drawViewHierarchyInRect:
UIImage *background = nil;

UIGraphicsBeginImageContextWithOptions (self.bounds.size, NO, self.window.screen.scale);

if ([self respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)])
{
    [self drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES];
}
background = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

我知道第二个比第一个要快,并且对我来说适用于iPhone,因为视图的尺寸很小。但是当我从iPad捕获视频时,视频变得生涩了。
任何人都可以告诉我更快的屏幕截图方法吗?
任何帮助将不胜感激

最佳答案

关于性能,Apple Docs声明以下内容:

除了-drawViewHierarchyInRect:afterScreenUpdates:外,UIView
现在提供了另外两种与快照相关的方法,
-snapshotViewAfterScreenUpdates:和-resizableSnapshotViewFromRect:afterScreenUpdates:withCapInsets :。 UIScreen也具有-snapshotViewAfterScreenUpdates:。

与UIView的-drawViewHierarchyInRect:afterScreenUpdates:不同,这些
方法返回一个UIView对象。如果您正在寻找新快照
查看,使用其中之一
这些方法。 比打电话更有效
-drawViewHierarchyInRect:afterScreenUpdates:将视图内容自己渲染为
到位图图像中。您可以使用返回的视图
作为应用中当前视图/屏幕的可视替代品。对于
例如,您可能将快照视图用于动画,其中更新了
大视图层次结构可能很昂贵。

关于ios - 最快的屏幕取景方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26842898/

10-09 08:53