EDIT 3 жовтня 2013 р.
Оновлено для підтримки нового супершвидкого методу drawViewHierarchyInRect: afterScreenUpdates: в iOS 7.
Ні. CALayer's renderInContext: наскільки я знаю, це єдиний спосіб зробити це. Ви можете створити категорію UIView, як ця, щоб полегшити собі подальший розвиток:
UIView + знімок екрана. H
#import <UIKit/UIKit.h>
@interface UIView (Screenshot)
- (UIImage*)imageRepresentation;
@end
UIView + знімок екрана.m
#import <QuartzCore/QuartzCore.h>
#import "UIView+Screenshot.h"
@implementation UIView (Screenshot)
- (UIImage*)imageRepresentation {
UIGraphicsBeginImageContextWithOptions(self.bounds.size, YES, self.window.screen.scale);
if ([self respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)])
[self drawViewHierarchyInRect:self.bounds afterScreenUpdates:NO];
else
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage* ret = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return ret;
}
@end
Цим ви, можливо, зможете сказати [self.view.window imageRepresentation]
у контролері перегляду та отримати повний знімок екрана своєї програми. Однак це може виключити рядок стану.
РЕДАГУВАТИ:
І можу додати. Якщо у вас є UIView з прозорим вмістом, і вам також потрібно подання зображення З вмістом, що лежить нижче, ви можете отримати зображення зображення подання контейнера і обрізати це зображення, просто взявши прямокутник підпрогляду і перетворивши його в контейнер подання система координат.
[view convertRect:self.bounds toView:containerView]
Щоб обрізати див. Відповідь на це запитання: Обрізання UIImage