iOS 对view进行截图的示例代码
程序员文章站
2023-12-17 09:01:16
本文主要介绍了ios 对view进行截图的示例代码,分享给大家,具体如下:
需要对wkwebview进行截图,之前用的是下面的方法,高版本的系统是没有问题的,低版本的却截...
本文主要介绍了ios 对view进行截图的示例代码,分享给大家,具体如下:
需要对wkwebview进行截图,之前用的是下面的方法,高版本的系统是没有问题的,低版本的却截到一张白图
- (uiimage *)convertviewtoimage:(uiview *)view{ // 第二个参数表示是否非透明。如果需要显示半透明效果,需传no,否则yes。第三个参数就是屏幕密度了 uigraphicsbeginimagecontextwithoptions(cgsizemake(view.bounds.size.width, view.bounds.size.height * 0.8),yes,[uiscreen mainscreen].scale); [view.layer renderincontext:uigraphicsgetcurrentcontext()]; uiimage *image = uigraphicsgetimagefromcurrentimagecontext(); uigraphicsendimagecontext(); return image; }
查看了之后发现是层级有问题,没有截到最上面的视图,于是改为下面的方法就行了
- (uiimage*)captureview:(uiview *)theview frame:(cgrect)frame{ uigraphicsbeginimagecontextwithoptions(cgsizemake(theview.bounds.size.width, theview.bounds.size.height*0.8), yes, [uiscreen mainscreen].scale); cgcontextref context = uigraphicsgetcurrentcontext(); uiimage *img; if([[[uidevice currentdevice] systemversion] floatvalue]>=7.0){ for(uiview *subview in theview.subviews){ [subview drawviewhierarchyinrect:subview.bounds afterscreenupdates:yes]; } img = uigraphicsgetimagefromcurrentimagecontext(); }else{ cgcontextsavegstate(context); [theview.layer renderincontext:context]; img = uigraphicsgetimagefromcurrentimagecontext(); } uigraphicsendimagecontext(); return img; }
要注意,frame是不能为空的,而且截的太快的话也会有问题,需要设置afterscreenupdates为no,因为设置为yes后,这些方法会等在view update结束在执行,如果在update结束前view被release了,会出现找不到view的问题。另外记得使用uigraphicsbeginimagecontextwithoptions,这样截取出来的是高清图。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。