在不使用renderInContext的情况下捕获UIView:

时间:2014-04-21 12:52:10

标签: ios objective-c uiview

我想从我的屏幕创建视频,为此我将捕获视图但由于某种原因我不想使用renderInContext:。我现在正在使用drawViewHierarchyInRect:,但这仅限于iOS 7,我的应用程序也支持早期的iOS版本。我是否会因使用drawViewHierarchyInRect:而被罚款?

这是我的代码

UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0);
[self drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

1 个答案:

答案 0 :(得分:3)

我知道您不想使用renderInContext,因为效率较低,但对于7之前的iOS版本,您应该使用的技术(因为如果您尝试使用在7.0之前的iOS版本中使用drawViewHierarchyInRect,应用程序将崩溃)。所以,这是一个在drawViewHierarchyInRect可用时使用renderInContext但在不在时UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0.0); if ([self respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) { BOOL success = [self drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES]; NSAssert(success, @"drawViewHierarchyInRect failed"); } else { [self.layer renderInContext:UIGraphicsGetCurrentContext()]; } UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 的版本:

{{1}}

这样,您将使用更高效的iOS 7+机制,但在早期版本上运行时至少不会崩溃。