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