大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在将私有组件打成二进制包的时候,我们可以选择打包成 静态库 或者 动态库 , 静态库 和 动态库 读取图片的方式也略有不同,同时在私有组件里面指定资源的方式也分两种,即 resources 和 resource_bundles ,下面做具体分析
创新互联是一家专业从事网站设计制作、成都做网站、网页设计的品牌网络公司。如今是成都地区具影响力的网站设计公司,作为专业的成都网站建设公司,创新互联依托强大的技术实力、以及多年的网站运营经验,为您提供专业的成都网站建设、营销型网站建设及网站设计开发服务!
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:
声明:
这样就可以全局使用了:
假设刚才已经有图片label.png,选中工程的xxx.plist文件,其中的icon files,增加一个item,名字为label.png,然后将iOS模拟器中相应的应用程序卸载掉,重启后发现图标已经变成label.png了。 如何删除iOS模拟器上的应用程序 作者:dd234 发布于:2012-2-17 11:32 Friday 分类:Xcode 有两种方法: 1. 利用Finder直接删除计算机上临时数据,位置在:当前用户-资源库-Application Support-iPhone Simulitor-4.3(版本)-Applications-某个文件夹; 2. 在模拟器内用鼠标长按应用程序图标,图标会晃动并在左上角出现“x”图标,点击即可删除应用程序。
以上都是使用 Image 加载本地图片资源,但是 SwiftUI 中的 Image 没有提供直接加载 URL 方式的图片显示,那么如何在 SwiftUI 中让 Image 加载网络图片呢,可以采用异步加载网络图片数据,由 data 转换成 UIimage ,再给 Image 展示
但是这种异步加载图片的方式在 Widget 中却失效了, Image 显示不了图片。
在 TimelineProvider 的 getTimeline 中 completion(timeline) 执行完之后,不再支持图片的异步回调了,所以必须在数据请求回来的处理中采用同步方式,将图片的 data 获取,转换成 UIimage ,在赋值给 Image 展示。
接下里给 iOS14 Widget小组件开发实践2——自定义Widget 里搭建的古诗视图增加一个网络封面图片显示,效果如下:
因为这个免费的 API 接口没有返回图片封面数据,所以就自己网上找个图片用来测试。关于图片请求的时机,这里我是将它放在了 API 接口回调后处理 json 转 model 的这一步:
最后在给 PoetryWidgetView 布局界面:
SwitUI-实现URL图片显示
将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
基本上每个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文件内容如下:
系统展示图片的时候,会先解析这个文件,然后根据设备的分辨率,找到对应的图片。