1

特定の場所のスクリーンショットを特定のサイズで撮りたい。私はこれを見つけました。しかし、それは画面全体を取ります。CGRectはどこに設定できますか。

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

1 に答える 1

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

出来上がり!

私が間違っていなければ、この方法は実際にはビューの不要な部分をまったくレンダリングしないため、後で画像をトリミングするよりもはるかに効率的です。

あなたの場合、このカテゴリをUIViewではなくUIWindowクラスに適用したいとします。

于 2013-01-14T11:20:11.033 に答える