我有一个UIView
,它有一个图像和一些按钮作为其子视图。我想使用renderInContext
或其他方法获取它的“快照”图像。
[clefView.layer renderInContext:mainViewContentContext];
如果我将UIView
(如上所述)传递给我,那么我会得到一个空白的位图。没有子项被渲染到位图中。
如果我传递了作为图像的子视图,那么我得到一个该位图的图像,并且毫不奇怪,没有它的兄弟(按钮)。
我有点希望renderInContext
能够拍摄图像及其所有可见的孩子并将其渲染成位图。有没有人有任何想法如何做到这一点?
答案 0 :(得分:35)
尝试这样的事情:
UIGraphicsBeginImageContext(clefView.bounds.size);
[clefView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
答案 1 :(得分:0)
简单的4行版本对我不起作用。我有一个UIView(带子层)和一个子UITextView。我可以将UIView渲染到UIImage中,但是子UITextView不会被渲染。
我的简单解决方案如下:
CGRect rect = [view bounds];
UIGraphicsBeginImageContextWithOptions(rect.size, YES, 0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();
[view.layer renderInContext:context];
for (UIView *sv in view.subviews)
{
CGContextTranslateCTM(context, sv.frame.origin.x, sv.frame.origin.y);
[sv.layer renderInContext:context];
CGContextTranslateCTM(context, -sv.frame.origin.x, -sv.frame.origin.y);
}
UIImage *capturedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
请注意,CGContextTranslateCTM的简单使用假定子视图除了转换之外没有其他转换。此外,我假设子视图完全包含在父视图框架中。