В настоящее время принятый ответ устарел, по крайней мере, если вы поддерживаете iOS 7.
Вот что вам следует использовать, если вы поддерживаете только iOS7 +:
+ (UIImage *) imageWithView:(UIView *)view
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0f);
[view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];
UIImage * snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return snapshotImage;
}
Swift 4:
func imageWithView(view: UIView) -> UIImage? {
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0.0)
defer { UIGraphicsEndImageContext() }
view.drawHierarchy(in: view.bounds, afterScreenUpdates: true)
return UIGraphicsGetImageFromCurrentImageContext()
}
Согласно этой статье , вы можете видеть, что новый метод iOS7 drawViewHierarchyInRect:afterScreenUpdates:
во много раз быстрее, чем renderInContext:
.