欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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,这样截取出来的是高清图。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:

下一篇: