美文网首页iOS开发iOS程序猿程序员
14.iOS原生分享:UIActivityViewControl

14.iOS原生分享:UIActivityViewControl

作者: Lee丶Way | 来源:发表于2018-07-30 17:05 被阅读46次

    前言: 因为公司业务的需要,微信Api提供的一次分享一张图片已经满足不了,故而使用系统分享UIActivityViewController,其原理很简单:选中多图--->系统拉起微信远程分享页面--->多图分享成功。在实际开发中确实也遇到不少的大大小小的问题,这里简单描述一下,并且附上我的并不完美的解决办法(因为没有根治)。

    遇到的问题:

    1 分享九宫格图片时,出现乱序。
    问题现象:直接将九张图片数组通过[[UIActivityViewController alloc] initWithActivityItems:imageArray applicationActivities:nil]进行分享,大多数时候朋友圈中的图片顺序和图片数组的顺序并不相同。
    产生原因:不清楚,有谁知道请留言或者私信告诉我,我想完全解决这个问题。
    处理方案:采取迂回战术,定义UIActivityItemSource的类,然后将图片和(缓存到本地的)图片地址,定义为子类的基本属性,然后分享子类的数组。
    处理结果:很大程度上解决了乱序的问题,但是没有根治!

    2 分享过程中读条过慢,或者直接出现分享失败请重试。
    问题现象:在微信远程分享页面中点发表或者发送时候,出现发送进度条,读条过慢后出现分享失败,点击重试后,大概率成功。
    产生原因:个人觉得是因为分享的时候,实际上是给微信发送一个请求包,该请求失败导致,大多数情况是由于网络状况或者请求包过大导致。
    处理方案:代码中只能通过尽量减少请求包的体积来处理,例如处理图片尺寸大小、图片质量大小(个人摸索的图片处理问题将在最后描述),尽量一次分享不要太多图片。
    处理结果:基本解决分享不成功问题(偶尔偶尔出现不成功)。

    3 分享过程中调用不起微信远程分享页面。
    问题现象:调用起系统分享页面后,点击微信图标,不弹出微信远程分享页面,或者一闪而过,控制台报dismissVC
    产生原因:个人分析有两个原因,原因1,过多的创建WINDOWS视图,导致远程页面找不到所要"依附"的视图,听说官方的说法是,只能保证有一个WINDOWS视图才能加载成功(我遇到的不是这个原因);原因2,图片的尺寸过大、图片的质量过大导致。
    处理方案:代码中只能通过减少WINDOWS视图,减少请求包的体积来处理,例如处理图片尺寸大小、图片质量大小(个人摸索的图片处理问题将在最后描述),尽量一次分享不要太多图片。
    处理结果:基本解决分享不成功问题(目前没有遇到调用不起的反馈)。

    PS 图片处理上的个人心得

    如果是方图,推荐尺寸不要超过 750*750,图片质量不要超过300K;
    如果是长图或者大图,要注意图片质量不要超过200K;

    以上是个人总结,如果有哪里不正确或者有更好的解决方法方案,还请在留言区或者私信告诉一下,共同成长。
    感谢。

    相关文章

      网友评论

      • 21ab06a7c64d:您好,我现在遇到了你问题2中的场景,其实我直接拍照存在本地,不做压缩,然后上传地址,也是可以上传成功的,也是小概率发送失败,对于压缩不压缩的,我测试了下,感觉并没有太大的作用,除了超大图片外,有兴趣可以交流下

      本文标题:14.iOS原生分享:UIActivityViewControl

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