#import "UIImage+Snapshot.h"
@implementation UIImage (Snapshot)
+ (UIImage *)getKeyWindowSnapshot
{
UIWindow *screenWindow = [[UIApplication sharedApplication] keyWindow];
return [self getSnapshotFromView:screenWindow atFrame:screenWindow.bounds];
}
+ (UIImage *)getSnapshotFromKeyWindowAtFrame:(CGRect)frame
{
UIWindow *screenWindow = [[UIApplication sharedApplication] keyWindow];
return [self getSnapshotFromView:screenWindow atFrame:frame];
}
+ (UIImage *)getSnapshotFromView:(UIView *)view atFrame:(CGRect)frame
{
if (!view || CGRectEqualToRect(CGRectZero, view.bounds)) {
return nil;
}
// 1、先根据 view,生成 整个 view 的截图
UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0); //NO,YES 控制是否透明
if ([view respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) {
[view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];
} else {
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
}
UIImage *wholeImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// 如果 frame 和 bounds 一样,只要返回 wholeImage 就好。
if (CGRectEqualToRect(frame, view.bounds)) {
return wholeImage;
}
// 2、根据 view 的图片。生成指定位置大小的图片。
CGFloat screenScale = [[UIScreen mainScreen] scale];
CGRect imageToExtractFrame = CGRectApplyAffineTransform(frame, CGAffineTransformMakeScale(screenScale, screenScale));
CGImageRef imageRef = CGImageCreateWithImageInRect([wholeImage CGImage], imageToExtractFrame);
wholeImage = nil;
UIImage *image = [UIImage imageWithCGImage:imageRef
scale:screenScale
orientation:UIImageOrientationUp];
CGImageRelease(imageRef);
return image;
}
@end
UIView 指定位置截图
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 注意:[self snapshotViewAfterScreenUpdates:YES]; 参数:YES-代表视图...
- String 字符串对象 在之前的学习中已经使用字符串对象了,定义字符串的方法就是直接赋值。比如: 定义mystr...
- 介绍如果将UIView截图成UIImage并且保存到相册中,通过使用UIView的扩展方式实现,好处有两点,1是可...
- 我们知道, 如果需要将UIView的4个角全部都为圆角,做法相当简单,只需设置其Layer的cornerRadiu...