十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
在将私有组件打成二进制包的时候,我们可以选择打包成 静态库 或者 动态库 , 静态库 和 动态库 读取图片的方式也略有不同,同时在私有组件里面指定资源的方式也分两种,即 resources 和 resource_bundles ,下面做具体分析
奎屯网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、响应式网站等网站项目制作,到程序开发,运营维护。创新互联公司2013年开创至今到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司。
1.resources
使用 resources 来指定资源,被指定的资源只会简单的被 copy 到目标工程中,如:
官方认为用 resources 是无法避免每个库和主工程之间的同名资源冲突,同时,Xcode 也不会对这些资源做优化。
2.resource_bundles
resource_bundles 允许定义当前 Pod 库的资源包的名称和文件。用 hash 的形式来声明,key 是 bundle 的名称,value 是需要包括的文件的通配 patterns。比如:
CocoaPods 官方强烈推荐使用 resource_bundles,因为用 key-value 可以避免每个库和主工程之间的同名资源冲突
1.如果使用 resourses 指定资源:
读取图片可以直接从MainBundle读取:
2.如果使用 resource_bundles 方式指定资源:
读取图片就要从自己的bundle读取,也就是OTSDebugPluginsModule.bundle:
1.如果使用 resourses 指定资源:
图片需要到自己的 frameWork 里的bundle读取:
2.如果使用 resource_bundles 方式指定资源:
读取图片同样也需要到 frameWork 里的bundle读取,但是bundle名称是OTSDebugPluginsModule.bundle:
后来试了一下不指定 OTSDebugPluginsModule.bundle 也行(注意:Xib和Storyboard不行,必须要指定OTSDebugPluginsModule.bundle):
动态库加载图片:
针对动态库和静态库通过resource_bundles获取资源,封装了一个分类UIImage+OTSAssets.h:
1.动态库获取资源
2.静态库获取资源
方案一:通过bundle获取
方案二:通过bundleName获取
有了这个分类的话,在业务组件里面获取图片资源就很方便了,比如在登录模块OTSAccountModule:
声明:
这样就可以全局使用了:
基本上每个IOS APP都会有新手引导页面这个功能,常规的就是几张静态图片,可以左右滚动。既然涉及到图片,就肯定会存在适配的问题(为了达到最优的体验效果,一般都会针对不同的分辨率设计不同尺寸的图片),本文主要就是讨论如何适配的问题。
2.1 方案一
根据屏幕分辨率的不同,使用不同的图片。
2.2 方案二
熟悉IOS开发的人都知道,每一个ios项目中,都有一个Assets.xcassets文件夹,用来管理项目中所有的图片(AppIcon、LaunchImage、其他业务图片)。
从上面的截图我们可以看到,xcode提供了两个内置的类型AppIcon、LaunchImage。我们只要提供正确尺寸的图片,ios系统就能在不同分辨率的设备上使用对应的图片而无需我们自己指定;另外就是我们自己创建的(avatar),提供2x、3x这两种类型的图片即可(1x的设备现在基本上找不到了,而且当前的ios系统也不支持1x的设备)。那么问题来了,我们自己创建的图片集合,只有3个类型(1x、2x、3x),并不能按照分辨率来设定。再看一下上面的截图,有一个“show”的图片集合,形式如下:
咦!这个鬼东西是怎么搞出来的?我们先看看Assets.xcassets文件夹在硬盘上的组织形式:
从上图我们可以看到,系统内置的两种类型AppIcon、LaunchImage对于的文件夹为AppIcon.appiconset、LaunchImage.launchimage,我们自己创建的图片集合avatar对应的文件夹为avatar.imageset。讲到这里,你应该大概猜到了show这个图片集合是怎么创建出来了吧?
1、先创建一个LaunchImage类型的图片集合;
2、修改名称(LaunchImage→show)
3、修改文件夹名称(show.launchimage→show.imageset)
回到正题,在show这个图片集合里面,我们就可以轻松的根据分辨率设置2x、3x类型的图片。
现在我们可以按照下图的方式使用新手引导图片了:
亲测:不同分辨率的设备,展示对应的图片。
我们注意到,show.imageset文件夹中有一个文件Contents.json,正是这个文件,ios系统才能根据设备类型展示对应的图片资源。Contents.json文件内容如下:
系统展示图片的时候,会先解析这个文件,然后根据设备的分辨率,找到对应的图片。
将css,html,js 所在的文件夹拖入项目的时候会有两种情况
一个是 Create groups for any added folders (创建虚拟结构-包结构)
一个是 Create folder references for any added folders (创建实体结构)
第一种是绝对路径 文件夹拖入为黄色
NSURL*fileURL = [[NSBundle mainBundle] URLForResource:@"index.html"withExtension:nil];
本地html中加载图片,js,css资源也应该使用绝对路径就行了
如 script type="text/javascript" src="index.js"/script
第二种是相对路径 文件夹拖入为蓝色
NSURL*fileURL = [[NSBundle mainBundle] URLForResource:@"file/index.html"withExtension:nil];
file为本地html所在文件夹
本地html中加载图片,js,css资源也应该使用相对路径
如 script type="text/javascript" src="js/index.js"/script