View生成Image

2019-07-07  本文已影响0人  Leon1024

.h文件

/**
 将view包含subviews所呈现的视图转换成image,非view包含的内容不被转换,默认倍率为屏幕倍率

 @param view 需要转换的视图
 @return 生成的image
 */
- (UIImage *)imageByConvertView:(UIView *)view;

/**
 将view包含subviews所呈现的视图转换成image,非view包含的内容不被转换

 @param view 需要转换的视图
 @param size 根据view的原点,设置要生成image的区域,如果超出将由 isOpaque参数控制超出部分是否透明
 @param isOpaque 设置生成的image背景是否不透明, YES不透明, NO透明
 @param scale 生成的视图倍率,按size的1比1像素为基准,如size(300,300),scale为2, 则生成image大小为600像素x600像素
 @return 生成的image
 */
- (UIImage *)imageByConvertView:(UIView *)view relativeOriginSize:(CGSize)size opaque:(BOOL)isOpaque scale:(CGFloat)scale;

.m文件

- (UIImage *)imageByConvertView:(UIView *)view {
    return [self imageByConvertView:view relativeOriginSize:view.frame.size opaque:NO scale:[UIScreen mainScreen].scale];
}

- (UIImage *)imageByConvertView:(UIView *)view relativeOriginSize:(CGSize)size opaque:(BOOL)isOpaque scale:(CGFloat)scale {
    if (!view) {
        return nil;
    }
    [view layoutIfNeeded];  // 如果有自动布局的,先刷新下布局
    UIImage *imageRet = [[UIImage alloc]init];
    UIGraphicsBeginImageContextWithOptions(size, isOpaque, scale);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    imageRet = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return imageRet;
}

上一篇 下一篇

猜你喜欢

热点阅读