问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

WKWebView 生成长截图

发布网友 发布时间:2022-11-30 02:49

我来回答

1个回答

热心网友 时间:2023-10-30 03:23

写个类继承 NSObject

.h 文件

#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>

@interface Util : NSObject

typedef void(^CapSuccessBlock)(UIImage *image,UIImage * thumbImage);

typedef void (^ CapFailureBlock )( NSError * error );

+( instancetype ) shareUtil ;

/**

  截屏

  @param url 截屏的url

  @param successBlock 截屏成功的回调

  @param failureBlock 截屏失败的回调

 */

-( void ) capturePicShareWitchUrl :( NSString *)url

                       success :( CapSuccessBlock ) successBlock

                       failure :( CapFailureBlock ) failureBlock;

@end

.m 文件

#import "Util.h"

#define kWindowWidth        [UIScreen mainScreen].bounds.size.width

#define kWindowHeight      [UIScreen mainScreen].bounds.size.height

#define KeyWindow          [[UIApplication sharedApplication].delegate window]

@interface Util ()< UIWebViewDelegate >

{

    CapSuccessBlock _successBlock; //截屏成功的回调

    CapFailureBlock _failureBlock; //截屏失败的回调

}

@end

@implementation Util

static Util * util;

+( instancetype ) shareUtil

{

    if (! util )

    {

        static dispatch_once_t onceToken;

        dispatch_once (&onceToken, ^{

            util = [[ Util alloc ] init ];

        });

    }

    return util ;

}

/** 截屏 */

-( void ) capturePicShareWitchUrl :( NSString *)url

                       success :( CapSuccessBlock ) successBlock

                       failure :( CapFailureBlock ) failureBlock;

{

    _successBlock = successBlock;

    _failureBlock = failureBlock;

    UIWebView * webView = [[ UIWebView alloc ] initWithFrame : KeyWindow . bounds ];

    webView. delegate = self ;

    webView. hidden = YES ;

    NSMutableURLRequest *re2 = [ NSMutableURLRequest requestWithURL :[ NSURL URLWithString :url]];

    [webView loadRequest :re2];

    [ KeyWindow addSubview :webView];

}

#pragma UIWebViewDelegate

-( void ) webViewDidFinishLoad :( UIWebView *)webView

{

    UIImage * image = [ self screenShotWithScrollView :webView. scrollView withSize : CGSizeZero ];

    UIImage * thumbImage = [ self screenShotWithScrollView :webView. scrollView withSize : CGSizeMake ( kWindowWidth , kWindowHeight )];

    

    if ( _successBlock )

    {

        _successBlock (image,thumbImage);

    }

    

    webView. delegate = nil ;

    [webView removeFromSuperview ];

    webView = nil ;

}

- ( void ) webView :( UIWebView *)webView didFailLoadWithError :( NSError *)error

{

    if ( _failureBlock )

    {

        _failureBlock (error);

    }

}

//图片

- ( UIImage *) screenShotWithScrollView :( UIScrollView *)scrollView withSize :( CGSize )size

{

    UIImage * image;

    

    UIGraphicsBeginImageContextWithOptions (size. width == 0 ?scrollView. contentSize :size, NO , [ UIScreen mainScreen ]. scale );

    {

        CGPoint savedContentOffset = scrollView. contentOffset ;

        CGRect savedFrame = scrollView. frame ;

        scrollView. contentOffset = CGPointZero ;

        scrollView. frame = size. width == 0 ? CGRectMake ( 0 , 0 , scrollView. contentSize . width , scrollView. contentSize . height ): CGRectMake ( 0 , 0 , size. width , size. height );

        [scrollView. layer renderInContext : UIGraphicsGetCurrentContext ()];

        image = UIGraphicsGetImageFromCurrentImageContext ();

        scrollView. contentOffset = savedContentOffset;

        scrollView. frame = savedFrame;

    }

    UIGraphicsEndImageContext ();

    

    if (image != nil )

    {

        return image;

    }

    return nil ;

}

@end

调用

-( void ) captureView :( UIBarButtonItem *)item

{

    UIWindow *window = [ UIApplication sharedApplication ]. keyWindow ;

    MBProgressHUD *hud = [ MBProgressHUD showHUDAddedTo :window animated : YES ];

    hud. animationType   = MBProgressHUDAnimationZoom ;

    hud. mode               = MBProgressHUDModeText ;

    hud. detailsLabel . text = @"正在生成截图" ;

    hud. detailsLabel . font = [ UIFont systemFontOfSize : 17.0 ];

    

    [[ Util shareUtil ] capturePicShareWitchUrl : KCapUrl success :^( UIImage *image, UIImage *thumbImage) {

    [ MBProgressHUD hideHUDForView :[ UIApplication sharedApplication ]. keyWindow animated : YES ];

        UIAlertController * alertVC = [ UIAlertController alertControllerWithTitle : @"温馨提示" message: @"截图成功,是否保存到相册" preferredStyle: UIAlertControllerStyleAlert ];

        

        UIAlertAction * action1 = [ UIAlertAction actionWithTitle : @"是" style : UIAlertActionStyleDefault handler :^( UIAlertAction * _Nonnull action)

        {

            [ self saveImageToPhotos : image];

            [ self saveImageToPhotos : thumbImage];

            [ self showPromptWithText : @"保存到相册成功" hideAfterdelay: 1.5 ];

        }];

        

        UIAlertAction * action2 = [ UIAlertAction actionWithTitle : @"否" style : UIAlertActionStyleCancel handler :^( UIAlertAction * _Nonnull action) {

            

        }];

        

        [alertVC addAction :action1];

        [alertVC addAction :action2];

        

        [ self presentViewController :alertVC animated : YES completion : nil ];

        

    } failure :^( NSError *error) {

        

    }];

    

    

}

- ( MBProgressHUD *) showPromptWithText :( NSString *)text hideAfterdelay :( CGFloat )timeInterval

{

    UIWindow *window = [ UIApplication sharedApplication ]. keyWindow ;

  

    MBProgressHUD *hud = [ MBProgressHUD showHUDAddedTo :window animated : YES ];

    hud. animationType   = MBProgressHUDAnimationZoom ;

    hud. mode               = MBProgressHUDModeText ;

    hud. detailsLabel . text = text;

    hud. detailsLabel . font = [ UIFont systemFontOfSize : 17.0 ];

    hud. removeFromSuperViewOnHide = YES ;

    dispatch_after ( dispatch_time ( DISPATCH_TIME_NOW , ( int64_t )(timeInterval * NSEC_PER_SEC )), dispatch_get_main_queue (), ^{

        [hud hideAnimated : YES ];

    });

    return hud;

}

#pragma mark - 保存截图到相册

- ( void ) saveImageToPhotos :( UIImage *)savedImage

{

    

    dispatch_async ( dispatch_get_main_queue (), ^{

        UIImageWriteToSavedPhotosAlbum (savedImage, self , @selector (image:didFinishSavingWithError:contextInfo:), NULL );

    });

    

}

//回调方法

- ( void ) image : ( UIImage *) image didFinishSavingWithError : ( NSError *) error contextInfo : ( void *) contextInfo

{

    NSString *msg = nil ;

    if (error != NULL )

    {

        msg = @"保存图片失败" ;

    } else

    {

        msg = @"保存图片成功" ;

    }

    

    NSLog ( @"%@" ,msg);

    

}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
同龄人早发育好还是晚发育好 小孩晚熟正常吗? 女孩子身体发育的早晚跟童子身有关系吗? 自喷漆如何晾干 自喷漆一般几分钟能干 自动静电喷塑流水线 玫瑰茉莉薄荷茶有什么功效 平面磨床哪家的好 十大名牌平面磨床 手机病毒查杀软件推荐选择最好的手机病毒查杀软件 如何对webview进行截图 华为荣耀60pro新机带贴膜吗? 华为 荣耀6 plus怎么贴膜 女人最旺家的大门 怎么样的大门才能旺家 旺财旺运的大门风水 大众全新SUV TAOS明年海外上市 搭载1.5T发动机 2022款Taos补足大众短板,入门级紧凑SUV,搭载IQ.DRIVE技术 动力略有不同 大众Taos明年正式售卖 大众全新紧凑型SUV Taos原型车 10月13日首发 全新大众汽车SUV或命名TAOS,10月13日亮相 将于2021年上市 大众全新SUV新车Taos正式发布 大众墨西哥工厂正式生产Taos 搭载1.5T发动机/二季度正式上市 预计2021年上市,大众Taos官图曝光! 什么生肖有蹄走路没什么声音 十二个生肖走动无生的动物! 我要报名模特比赛,填完了个人资料,还要写个人简介我不知道怎么写 如何和高中老师沟通孩子的情况 宁波江东哪里有买家居装饰品 宁波市鲲鹏贸易有限公司怎么样? BitComet6.0在打开时出现can not listen to port:7105是怎么回事????? WKWebView 整个网页截屏 跟争强好胜的同事要怎样相处? 遇到争强好胜的朋友怎么相处? 什么事都要争,有个爱钻牛角尖的朋友怎样相处? 海参一周孩子可以吃吗 大连除了太平洋,还哪有 pura bianca rosabianca有没有专柜 声优怎么练出来的 海南的有什么名人? 求That&#39;s what I thought语法解释 that is what i like是什么从句 求BrunoMars-That&#39;sWhatILikemp3 thatiswhatimean是什么句型 机关保洁员的工作职责 保洁个人简历怎么写标准范文模板 夜市卫生管理制度 脸上脱毛有哪些方法教你5种简单去除方法 三年级数学题,一只手拿着铅笔是平移还是旋转 佳鑫铁路物流靠谱吗 临沂佳鑫双语升学率