文档章节

iOS开发APP瘦身之PDF图片资源加载框架

jiisd
 jiisd
发布于 2016/10/19 01:00
字数 1221
阅读 284
收藏 6

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

#####简述:本文介绍的是一个用于在iOS项目中高效加载PDF矢量图标(尺寸可以无限放大)的工具。

我们知道在 Xcode 6 及以上版本可以在 Asset Catalog 中使用 PDF 格式的矢量图资源。


【引用】

大致上,PDF是矢量元素的事实标准。矢量文件包含一个元素的很多元数据,用来告诉系统如何渲染这些内容,而这些和屏幕分辨率无关。举个通俗易懂例子,一个圆形的矢量PDF图,当它渲染成5像素宽和渲染成5000000像素宽时是一样清晰的。

在iOS平台,Xcode是在编译时,根据你的矢量PDF图的大小,生成1x、2x和3x图。如果你的PDF图是45*45px,那么Xcode会在编译时生成下面3个PNG:

45*45px      :1x设备用的(iPhone 3G and 3GS)

90*90px      :2x或Retina显示设备用的(iPhone 4, 4S, 5, 5S, and 6)

135*135px    :3x设备用的(iPhone 6 Plus 及以上)

这也意味着当有更高的屏幕分辨率时,Xcode可以根据已有的矢量PDF放大图片,这样自动就支持以后的设备了。还有,如果你是OS X开发者,那么矢量PDF就更好用了,OS X app完全支持矢量PDF,你可以用代码缩放图片而不会失真。

想了解上述全部内容请猛戳传送门:4个你需要知道的Asset Catalog的秘密

使用 PDF 作为图标素材资源具有如下优点:

1. APP 瘦身

我们对比一下最近设计部门的朋友刚导出的某个图标的一套常规的 PNG 图片和 PDF 类型的图片的大小:

PDF 文件大小为 7KB

PNG 三个文件合计大小为 85KB

对比结果: PDF 类型的文件大概占空间为传统 PNG 类型的 8%(以当前资源为依据,不同资源对比结果可能会有部分出入)。

2. 便于维护

首先就是设计部门出图就会比之前方便很多,直接导出矢量文件即可,并且如果后期再需要 4X、5X... 规格的图,不需要对之前的图标再返工处理。

再者作为开发者在管理图片相关的添加、替换、移除等重复性的操作维护压力可以降低。

3. 可以无限放大

由于 PDF 图标文件为矢量图,不同于之前的传统的位图,在放大之后可以依然保持清晰而非模糊毛边有像素颗粒感。

例如,后期需求调整要求某一个按钮交互热区变大,相应图标也要放大。如果使用之前 PNG 类型的资源,需要设计重新再出一套图(作为一个严谨的程序员,当然不能够容忍模糊图标的存在🙃),但无形中这些都是开发过程中的时间成本。

想想如果使用 PDF 类型的资源直接改变一下图标大小不就可以了吗?那就直接行动,但是最后发现在 Asset Catalog 就算使用了 PDF 类型的图放大后还是模糊了。为什么呢?原来 Xcode 在编译的时候只是依据目前设备所需要的资源只自动生成1X、2X和3X规格的位图类型的图片,那么在后期通过只改变控件的大小来希望图片精度也动态的调整自然是行不通了。

由此就产生了 YHPDFImageLoader 这个工具,它旨在解决上述后期动态调整放大图片发虚的问题,与系统调用加载图片兼容,并具有三级加载两级缓存功能,以减少重复性质的运算并提高加载效率,下面是一张加载效果对比图:

YHPDFImageLoader 用法

当然,使用 YHPDFImageLoader 依然可以使用 .bundle 资源文件包或者文件夹的形式管理 PDF 素材资源(虽然苹果声称使用 Asset Catalog 后 APP 的相关资源可以有效的防盗,但是目前仍可轻而易举的提取出里面的内容)。

另外,YHPDFImageLoader 同样支持使用 CocoaPods 集成

  • 在 Podfile 文件中添加:
pod 'YHPDFImageLoader'
  • 执行 pod install 命令

使用方式

  • 第一步:

#import "UIImage+YHPDFIcon.h"

  • 第二步:

UIImage *image = [UIImage yh_imageNamed:@"pdfName"];

  • That's all.

效果展示(源文件图片分辨率为 30x46 ,大小为 7KB)

####更多使用方法请参照项目中 Demo

###还在等什么,赶紧 点击下载 集成进你的项目中和你的设计小伙伴们更愉快的玩耍吧。

© 著作权归作者所有

jiisd
粉丝 0
博文 1
码字总数 1221
作品 0
朝阳
私信 提问
跨平台(uni-app)文件在线预览解决方案

1024刚过,也祝愿各位码友在今后生活中,身体健康,事事顺心,再无Bug。 一、前言 之前写过一篇文章关于上传目录文件:uni-app系统目录文件上传(非只图片和视频)解决方案,这次来解决文件预...

silianpan
10/25
0
0
(转)直接拿来用!最火的iOS开源项目(二)

“每一次的改变总意味着新的开始。”这句话用在iOS上可谓是再合适不过的了。GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x到如今的iOS 7,有的项目...

孙启超
2013/06/21
3.9K
1
(转)直接拿来用!最火的iOS开源项目(一)

AFNetworking 在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项目。AFNetworking是一个轻量级的iOS、Mac OS X网络通信类库,现在是GitHub上第三大Objective-C库。它建立在...

孙启超
2013/06/21
3.8K
0
ios中应用Lottie解决动画问题

作为一名iOS工程师,深知复杂动画的痛苦,下面我们来介绍下Lottie来解决日常的动画难题。 Lottie的简单介绍: 使用Lottie开发的流程是: 设计师在AE中设计完成你的动画,通过bodymoving插件导...

威廉云霄
02/20
0
0
iOS运营级B2B服务平台App、自定义图标库、个人中心页面、识别身份证Demo、瀑布流等源码

iOS精选源码 简单的个人中心页面-自定义导航栏并予以渐变动画(http://www.code4app.com/thread-10860-1-1.html) 一个近乎完整的可识别中国身份证信息的Demo 可自动快速...(http://www.code4a...

Android爱开源
2018/10/25
18
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx反向代理+负载均衡+服务器宕机解决办法

反向代理 作用:保证系统安全,不暴露服务器IP,利用nginx服务器,利用内网ip进行访问,避免出现攻击服务器的情况 启动本地tomact,127.0.0.1:8080可以访问到tomcat管理页面 效果:通过 bbs....

Jack088
12分钟前
2
0
返回IEnumerable 与IQueryable相比 [关闭]

返回IQueryable<T>与IEnumerable<T>之间有什么区别? IQueryable<Customer> custs = from c in db.Customerswhere c.City == "<City>"select c;IEnumerable<Customer> custs = from c i......

技术盛宴
19分钟前
2
0
开放下载 | 《Knative 云原生应用开发指南》开启云原生时代 Serverless 之门

点击下载《Knative 云原生应用开发指南》 自 2018 年 Knative 项目开源后,就得到了广大开发者的密切关注。Knative 在 Kubernetes 之上提供了一套完整的应用 Serverless 编排服务,让应用开发...

阿里巴巴云原生
23分钟前
2
0
解密淘宝推荐实战,打造 “比你还懂你” 的个性化APP

手淘推荐简介 手淘推荐的快速发展源于2014年阿里“All in 无线”战略的提出。在无线时代,手机屏幕变小,用户无法同时浏览多个视窗,交互变得困难,在这样的情况下,手淘借助个性化推荐来提升...

阿里云官方博客
26分钟前
2
0
内核程序中进程的pid,handle,eprocess之间相互转换的方法

在内核程序开发中,我们常常需要取得某进程的pid或句柄,或者需要检索进程的eprocess结构,很多API函数需要的参数也不同,所以掌握pid<->handle<->eprocess相互转换的方法会大大提高我们的开...

simpower
28分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部