私は実際に数日前にこれに固執しました...そしてしばらくして私は解決策を思い付くことができました!私はそれをカテゴリーに実装しました:
#import "UIView+RenderSubframe.h"
#import <QuartzCore/QuartzCore.h>
@implementation UIView (RenderSubframe)
- (UIImage *) renderWithSubframe:(CGRect)frame {
UIGraphicsBeginImageContextWithOptions(frame.size, NO, 0.0);
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextConcatCTM(c, CGAffineTransformMakeTranslation(-frame.origin.x, -frame.origin.y));
[self.layer renderInContext:c];
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return screenshot;
}
@end
出来上がり!
私が間違っていなければ、この方法は実際にはビューの不要な部分をまったくレンダリングしないため、後で画像をトリミングするよりもはるかに効率的です。
あなたの場合、このカテゴリをUIViewではなくUIWindowクラスに適用したいとします。