美文网首页
ios 屏幕截图切圆角切不掉怎么解决?白线也去不掉怎么办?

ios 屏幕截图切圆角切不掉怎么解决?白线也去不掉怎么办?

作者: 90后的晨仔 | 来源:发表于2020-02-24 22:05 被阅读0次

屏幕截图,图片的底部为啥有白线?并且自己的屏幕图片明明切图了,但是为啥截的图还是有会没有切圆角的那部分?what?why?
demo在这里

问题一:为啥屏幕截图底部会有白线?
1.可能会出现白线的代码如下:
//对某个view进行截图
-(UIImage *)screenshotsImageFromView:(UIView *)view {
    
    JCShowView *showView  = (JCShowView *)view;
    CGRect screenRect = [showView bounds];
    NSInteger scale = 1;
    if ([[UIScreen mainScreen]respondsToSelector:@selector(scale)]) {
        CGFloat tmp = [[UIScreen mainScreen]scale];
        if (tmp > 1.5) {
            scale = 2.0;
        }
        if (tmp > 2.5) {
            scale=3.0;
        }
    }
    if (scale > 1.5) {
        UIGraphicsBeginImageContextWithOptions(screenRect.size, NO, scale);
    } else {
        UIGraphicsBeginImageContext(screenRect.size);
    }
    
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    [showView.layer renderInContext:ctx];
    UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}
2.常规测试了也没发现啥问题,最后查阅资料问题出在这行代码了UIGraphicsBeginImageContextWithOptions(screenRect.size, NO, scale);

原因是因为当屏幕的高度是CGFloat类型的时候会出现白线,所以把高度通过NSNumber转成 NSInteger好了、优化后代码如下:


        NSInteger screenH = [[NSNumber numberWithDouble:screenRect.size.height] integerValue];
        UIGraphicsBeginImageContextWithOptions(CGSizeMake(screenRect.size.width, screenH), NO, scale)
问题一:为啥屏幕截图上的图片圆角已经切了,为啥最后相册查看的时候还是显示没切掉的圆角呢?

有问题的图如下:


Snip20200224_2.png
分析:圆角应该在图片上切,而图片的父视图的背景应该在截屏的一瞬间做下处理。优化后在截图正常了。如下图:
  CGContextRef ctx = UIGraphicsGetCurrentContext();
  #截取的时候先修改成黑色背景
    showView.backgroundColor = [UIColor blackColor];
    [showView.layer renderInContext:ctx];
    UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
#完毕之后在修改成白色背景
    showView.backgroundColor = [UIColor whiteColor];  
WechatIMG214.jpeg
最终代码如下:
-(UIImage *)screenshotsImageFromView:(UIView *)view {
   
   JCShowView *showView  = (JCShowView *)view;
   CGRect screenRect = [showView bounds];
   NSInteger scale = 1;
   if ([[UIScreen mainScreen]respondsToSelector:@selector(scale)]) {
       CGFloat tmp = [[UIScreen mainScreen]scale];
       if (tmp > 1.5) {
           scale = 2.0;
       }
       if (tmp > 2.5) {
           scale=3.0;
       }
   }
   if (scale > 1.5) {
       //        UIGraphicsBeginImageContextWithOptions(screenRect.size, NO, scale);
       //这里的屏幕高度需要设置成NSInteger类型的否则截图底部会有白线
       NSInteger screenH = [[NSNumber numberWithDouble:screenRect.size.height] integerValue];
       UIGraphicsBeginImageContextWithOptions(CGSizeMake(screenRect.size.width, screenH), NO, scale);
   } else {
       UIGraphicsBeginImageContext(screenRect.size);
   }
   
   CGContextRef ctx = UIGraphicsGetCurrentContext();
   showView.backgroundColor = [UIColor blackColor];
   [showView.layer renderInContext:ctx];
   UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();
   showView.backgroundColor = [UIColor whiteColor];
   return image;
}

相关文章

  • ios 屏幕截图切圆角切不掉怎么解决?白线也去不掉怎么办?

    屏幕截图,图片的底部为啥有白线?并且自己的屏幕图片明明切图了,但是为啥截的图还是有会没有切圆角的那部分?what?...

  • tableViewCell 下方多出白线错误

    今天tableViewCell 的 下面一条白线怎么也去不掉 如果一下方法都不能去掉这条白线的话 你可能跟我犯了一...

  • ios圆角优化-不掉帧

    如何提高ios界面流畅度相信这是每个开发者都在孜孜不倦攻克的问题,因为笔者也是小白所以难得也就不写了,来说点简单实...

  • 碎碎念

    唯有自己变得更好,才是解决一切问题的关键。别人再好,也是他人的。自己的好,别人怎么拿也拿不掉。 能者多劳,这是一种...

  • 阅读记录(60)|如何有效“吃掉”三只青蛙

    阅读记录# 阅读目的/碎片出处碎片出处:## 列出“三只青蛙”容易,但解决不掉怎么办?[https://mp.we...

  • 2017

    2017,爱上你,深深爱上,爱上你的一切。 忘不掉,抹不掉,放不掉。 难以言述的思念。 你。 如果, 我, 真是你...

  • 原创歌词‖怎么

    怎么我还是睡不着怎么我还是忘不掉怎么我对你比他还要好怎么我就是对你割舍不掉 从一开始的我们相遇你说这一切都不是注定...

  • 2018-07-12

    能模糊一切回忆中的一切,却模糊不掉回忆中的你。

  • 我的故事①-成长环境

    可能是越长越大,觉得曾经的一切,都是那么刻骨铭心,忘不掉,也抹不掉,也正因为如此,才成就了现在的我!虽然用了...

  • 《蒹葭曲》

    我忘不掉他。 哪怕世间没有轮回,岁月没有作止。 我仍旧忘不掉他。 忘不掉他给我的一切。 公子,为何你我的情缘相隔了...

网友评论

      本文标题:ios 屏幕截图切圆角切不掉怎么解决?白线也去不掉怎么办?

      本文链接:https://www.haomeiwen.com/subject/ppgwqhtx.html