美文网首页人工智能技术杂谈iOS 开发 我的ios进阶
[程序员日记]iOS截图(1)生成分享图片

[程序员日记]iOS截图(1)生成分享图片

作者: KeyLiu7 | 来源:发表于2016-04-22 10:41 被阅读5402次

    在iOS开发中,经常会遇到分享到微博微信时需要附带一张分享图片,图片中需要分享的相关信息(如产品二维码,分享人信息等)。

    (1)首先要创建一个View重写initWithFrame方法将要分享的内容布局到上面

    (2)新建方法 - (UIImage *)snapshotViewFromRect:(CGRect)rect withCapInsets:(UIEdgeInsets)capInsets 生成图片

    - (UIImage *)snapshotViewFromRect:(CGRect)rect withCapInsets:(UIEdgeInsets)capInsets {
       UIGraphicsBeginImageContextWithOptions(CGSizeMake(rect.size, NO, [UIScreen mainScreen].scale);
       CGContextRef currentContext = UIGraphicsGetCurrentContext();
       CGContextTranslateCTM(currentContext, - CGRectGetMinX(rect), - CGRectGetMinY(rect));
       [self.layer renderInContext:currentContext];
       UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
       UIGraphicsEndImageContext();
    
       UIImageView *snapshotView = [[UIImageView alloc] initWithFrame:rect];
    
       snapshotView.image = [snapshotImage resizableImageWithCapInsets:capInsets];
       return snapshotView.image;
    }
    

    后期调整
    设置水印大小,为了防止微博分享时生成的水印会挡住二维码,因此将分享的图片延长。

     CGFloat heightWithShuiYin = 40.0;//设置图片延长的长度
    

    更改图片的大小

    UIGraphicsBeginImageContextWithOptions(CGSizeMake(rect.size.width, rect.size.height + heightWithShuiYin), NO, [UIScreen mainScreen].scale);
    
    UIImageView * snapshotView = [[UIImageView alloc]initWithFrame:CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height + heightWithShuiYin)];
    

    分享结果如图:

    微博分享截图

    有关iOS的截图的拓展:

    iOS截图(2)生成长图
    iOS截图(3)截取网页片段

    相关文章

      网友评论

      • 阿拉斯加的狗:有demo吗 兄弟 求发一个 我要做这个一模一样的 我参考一下
      • 高乔人:你好等看下你的demo吗
        KeyLiu7:@高乔人 :+1::+1:
        高乔人:@刘奇1993 好的,谢谢大神,我也搞定了,
        KeyLiu7:@高乔人 这个软件还是上家公司,demo可以看下第二篇文章https://github.com/KeyLiu/LQCutLongPic.git
      • Qson1:可否提供demo
        Qson1:@刘奇1993 谢谢
        KeyLiu7: @Qson1 Demo地址:https://github.com/KeyLiu/LQCutLongPic.git
      • 1963d73a871e:想请教一下,这段代码似乎是在view上绘制出来之后,截图的?如果想点击分享后全部都在后台绘制生成一张图片,可否提供一下思路,万分感谢。
        Michael1:@吴小佩 Masonry添加约束之后还不能获取到frame ,需要在layoutSubviews中获取
        吴佩在天涯:请问你的绘制之后再截图有Demo吗?我现在也要实现这样的功能。但是,发现在绘制UIview的时候,Masonry无效。可否指教?谢谢
        KeyLiu7:你好,抱歉现在才回答你的问题。绘制图片的方法是使用C语言的方法 UIGraphicsBeginImageContextWithOptions(size) 和UIGraphicsEndImageContext()中进行的,我的方法就是绘制一个view,然后通过这个view生成图片,这样生成图片的大小及图片上的内容就和绘制的view一致。如果在后台进行可以在异步线程中操作,保存在本地也可在图片生成后调用相关保存相册的方法。

      本文标题:[程序员日记]iOS截图(1)生成分享图片

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