96编辑器旗下产品
找图
终身
ID:0
到期时间:永久
退出登录
您的位置:首页 > 百科管理 > 详情

ios 分享纯图片素材-iOS shareExtension总结

原创:找图网 2023-06-04 07:23:44
  • iOS中怎么样在Xcode中复制图片素材

  • 首先得理解一个概念。

    在xcode中看到得文件夹(group)是逻辑上的,而非物理上的。

    所以建议,在project下手动创建一个文件夹,再手动拖到相应工程目录下。

    切记不要在project中右键创建文件夹,否则所有文件都在工程目录下的。

  • 如何提取iOS App素材

  • 如果开发者要开发应用,游戏,但自己并不擅长美工,那么只能去网上到处找素材,但网上的免费素材并不多,免费素材很少能满足开发者的需求。不过还有一个办法,我们可以从其他应用中提取素材,这些素材的质量还是比较高的。

    我们就拿微信的打飞机为例,首先把微信的安装包下下来,apk文件,或者ipa文件,把后缀名改成rar,然后用winrar解压出来。

    ipa解压后素材很好找,资源都放在一个目录下,直接用缩略图来找就能找到需要的图片素材,有些是单独一个对象的图片,可以拿来直接用,有些是多个对象的图片合成一张大图,这就需要对应的打包配置文件才能读取各区域的小图片,如果配置文件加密了,那么这个大图基本上没办法用。

    apk解压出来素材都放在assets和res目录下,不过由于微信打飞机是做成一个jar集成在微信里面的,所以我们在assets/preload目录下可以看到一个名字带有“shoot”的jar文件,把这个jar解压出来,在res目录下可以找到一些图片素材,另外在shoot目录下可以找到打包过的图片素材:

    这些打包的图片也有对应的打包配置文件,记录了各个小图的裁剪区域,也需要用配置文件来读取图片信息。好在apk版本的配置文件并没有加密,用文本模式打开我们就可以看到配置信息,包括各个小图片的区域和名称,稍作调整支持我们常用的开发引擎,就可以拿来用了。

    但并不是所有的应用都可以提取其素材,有些会把图片信息加密处理了,在加载的时候再解密出来使用,这样我们就没法盗用它的素材了。另外,如果明显盗用其他应用的素材,就会涉及到侵权了,所以开发者提取应用的素材最好以自己开发练习来用,不要光明正大的把应用发布到市场上去。

    最后还是要说,成功的应用离不开优秀的美工,美工转独立开发者成功的案例很多,但程序员要自己做美工还是很有难度的,实在需要美工的话可以考虑招人或者外包出去。

  • iOS shareExtension总结

  • 下面主要说一下再整个过程中个人觉得比较重要的几个地方

    这些属性根据自己的需求设置好数量就行。说一下可能遇到的问题

    1.1、

    NSExtensionActivationSupportsText,主要用于备忘录之类文本分享,网上资料有的说设置bool类型,有的说设置string类型,值为YES,我这边都不好使,最后设置为值为1的number类型可以了。如果跟我遇到同样问题的可以试下

    1.2、

    在App Store分享APP时,有两个NSExtensionItem,UTI分别为和,loadItemForTypeIdentifier获取item类型为NSURL和UIImage,截图分享的item类型也为UIImage

    在自定义VC的viewDidLoad异步获取分享数据,获取完毕刷新UI

    这块是这个功能踩坑最多的地方,因为在widget中内存限制为120M,图片、视频、文件,随随便便都超了,这里说一下几个需要注意的地方

    这里主要是多图时可能会出现内存过大的情况,我这边的处理是直接把图片copy到共享目录,然后跳转主App里发送原图。也可以直接将图片压缩后转成base64str数组然后写入共享目录,不过压缩比例不好控制,压缩后的总大小,小图不能压缩等都要考虑进去,下面把几个用到的方法和处理时机贴一下

    3.1.1、

    图片压缩方法

    3.1.2、

    图片base64str互转

    3.1.3

    、获取主要信息loadItemForTypeIdentifier方法里保存图片地址,用于UI展示及后续写入共享目录

    3.1.4、

    确认分享时把图片批量copy到共享目录,也可以选择压缩后转base64str数组写入文件

    3.1.5、

    呼起主APP后先从获取图片地址数组,在通过图片地址取分享数据

    一方面是UI展示所需要的内容,如视频封面图、时长、大小,文件的大小、类型

    这里说一下取文件大小时不能取NSData得length方式,大文件会导致内存溢出,应该使用NSFileManager获取,这里要注意下通过loadItemForTypeIdentifier取得的路径要先stringByRemovingPercentEncoding解码再截取/var之后的路径,比如你取得文件路径为file%3A%2F%2F%2Fprivate%2Fvar%2Fmobile%2FLibrary%2FMobile%20Documents%2Fcom%7Eapple%7ECloudDocs%2F%E6%9C%AA%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6%E5%A4%B9%

    那你要用/var/mobile/Library/Mobile Documents/com~apple~CloudDocs/未命名文件夹/去取文件大小,下面把主要用的方法贴一下

    3.2.1、

    文件大小以及格式化

    3.2.2、

    获取视频时长(这里要用全路径)

    3.2.3、

    获取视频封面图(这里也要用全路径)

    3.2.4、

    获取文件类型对应切图,把图片素材替换为你们UI给的切图

    因为需要把分享的文件存储到group共享目录里去,当文件超过120M的时候,就不能使用writeToURL了,要不会内存溢出,这里使用NSFileManager的copyItemAtPath,在使用这个函数的时候两个路径都要使用解码后再截取/var之后的路径

    目前能想到的就这么多啦,如果有什么疑问或者发现什么不足,欢迎评论指正。

    最新文章 更多
    最新素材 更多
    公司介绍 网站地图 图片资讯
    Copyright © 2010-2022 山东找图网络科技有限公司  鲁ICP备18007836号-3  邮箱:15653358549@163.com