几天前我实际上被困在这个问题上......然后过了一段时间我设法想出了一个解决方案!我已经在一个类别中实现了它:
#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
瞧!
如果我没记错的话,这种方法实际上根本不会渲染视图中不需要的部分,这比事后裁剪图像更有效。
在您的情况下,您希望将此类别应用于 UIWindow 类而不是 UIView。