特定CGRect中的UIGraphicsGetImageFromCurrentImageContext

时间:2013-01-14 11:14:36

标签: ios objective-c xcode screenshot screen-capture

我想以特定尺寸拍摄特定位置的屏幕截图。我找到了这个。但它需要整个屏幕。我在哪里可以设置CGRect。

UIGraphicsBeginImageContext(self.window.bounds.size);
[self.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

1 个答案:

答案 0 :(得分:13)

几天前我被困在了这个......然后过了一会儿我设法找到了解决办法!我已经在一个类别中实现了它:

#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。