原文:http://schlu.org/2013/10/01/Xcode-Asset-Catalogs.html

基础知识
在今年的WWDC大会上苹果介绍了Asset Catalogs。Asset Catalogs是用来减少工程导航上的混乱,让图片使用情况变得更为有条理。它的方式是,你不必将所有图片都列出来,取而代之,你可以在工程中创建一个或者多个asset catalog,你可以把图片拖拽到一个合适的位置来进行管理。

Asset Catalog除了可以管理app icon以及启动图片,你还可以使用它管理任意图片。图片可以为所有设备使用,也可以为是某一设备的特定图片。这种方式非常方便,因为你不必在记住为iPhone或者iPad或者retina屏或者4英寸iPhone等设备提供的特定图片的名字。

Universal

特定设备

切图以及改变尺寸
你可以使用Asset Catalog来切图。它会告诉iOS以及Xcode当view比图片更大的时候如何拉伸图片。这个功能iOS之前也使用几个UIImage的不同方法支持了,最新的方法是resizableImageWithCapInsets:。其中最大的改进就是Interface Builder现在图片即使会拉伸,插件仍然能正确显示。和之前一样,拉伸的方向是竖直拉伸,水平拉伸,或者双向拉伸。

在Xcode中切图有一个非常好的地方就是设计师们提供的图片的宽度是不受限制的。你不必告诉Xcode图片的末端在哪里。进行了一些小测试之后,我发现Xcode会在运行的时候就生成一些最小的图片以供需要。这就意味着它会在将图片打包格尼之前就切掉所有不需要的部分。这样就非常好了,在Xcode中你可以看到图片的完整大版本,但是打包的时候又只提供最小的部分。

详细情况你可以点此看看苹果关于切图的官方文档>>

技术问题
关于这点我没有深入进行研究,但是看上去似乎Asset Catalogs都被放到一个叫做Assets.car这个文件中。我并不清楚具体使用了哪个特定的二进制格式来打包所有图片,然后切图的,但是我猜这样做的有个有点事你不需要浪费block空间了。你可能知道你能分配给一个文件的最小空间是1block。由于iOS的block大小是8k,如果一张图片是12k,他就会占用1.5block,有半个block被浪费了。想想如果是1000张图片,那么这样的话节省多少blcok啊。这样为你的用户缩短下载时间。

加载Asset Catalogs有一些间接成本。我认为app会将所有的asset载入内存,这样就会有一些图片占用了内容,但是不会被使用。这也就是说,如果想要出问题的话你可能还没有足够的图片。但是有一件事情不管如何你都需要做的就是删除不需要的图片。使用了一款Mac app:Slender。它现在还不支持Asset catologs,但是希望以后它能支持。

更新以及比较分辨图片
使用Asset Catalogs有一个最大的问题就是更新图片。我和设计师一起工作时他们经常要迭代多次来确保app看上去很完美。一般我会从设计师那儿拿到一组新图,然后把它们拖到工程中使用。正如之前说的,在Asset Catalog中如果你希望更新图片你需要把它们拖到正确的盒子当中,这么做有些麻烦。但是现在我也没有一个很好的方法来优化这个流程。由于Asset Catalogs的重点就是从繁杂的文件名中解放出来,所以我不知道Xcode可以怎么样知道如何把图片放到正确的位置。

另一个问题就是   。以前可以再Xcode的版本编辑器中看到新旧图片会紧挨在一起
。而现在的Asset catalogs,就算只有一张图片变化了,它就认为这个catalog整个变化了。这对我来说基本不是个问题,因为我使用Black Pixel公司的Kaleidoscope 来处理我比较分辨图片的需要。Kaleidoscope在比较分辨图片的时候仍然很好用。但是不能在工程的导航处了解到哪些东西变化了还是不太方便。

本地化以及翻译
图片和app中的其他东西一样也需要本地化和翻译。在这一点上我不知道本地化Asset Catalogs的方法。但是这个问题可能不太要紧,因为图片本地化的需要进行也是因为某个icon在某个国家代表了完全不同的意义。如果发生了,也没有足够的理由不让你使用Asset Catalogs。如果需要翻译一张图片的话还可以使用过去的方式。

iOS 6
这也可能不是什么问题,因为很多人都会很快只为iOS 7进行开发。如果你想同样兼容iOS 6,它会包含Assets.car文件以及所有的图片文件。我没有去研究它会如何影响变化图片大小。这个问题无关紧要,因为如果你想要兼容iOS 6的话,因为会增加app的大小,你根本就不应该使用Asset Catalogs。

论坛原帖:http://www.cocoachina.com/bbs/read.php?tid=161717

粗解Xcode 5新特性: Asset Catalogs的更多相关文章

  1. xcode 10 新特性

    这里主要介绍一下Xcode10 版本主要更新的内容.随着iOS12的发布,Xcode10已经可以从Mac App Store下载.Xcode10包含了iOS12.watchOS 5.macOS10.1 ...

  2. iOS 11系列 - Xcode 9新特性

    Xcode 9最近刚刚发布,带来了一系列不错的新特性,可以更好的帮助到开发者完成开发工作. Xcode Runtime Tool Xcode 9中有许多Runtime Tool可以帮助开发者找到代码错 ...

  3. IOS学习【xcode 7新特性url链接】

    由于xcode7的更新,在访问http链接的时候会输出错误信息 The resource could not be loaded because the App Transport Security ...

  4. Xcode 8 新特性

    在2016 苹果全球开发者大会(WWDC)期间, 苹果一如既往地给开发者们披露了新版的集成开发工具 – Xcode, 在过去的每一次大版本发布中,苹果都会积极地改进开发工具,添加一些极具吸引力的新功能 ...

  5. 详解Hadoop3.x新特性功能-HDFS纠删码

    文章首发于微信公众号:五分钟学大数据 EC介绍 ​Erasure Coding 简称EC,中文名:纠删码 EC(纠删码)是一种编码技术,在HDFS之前,这种编码技术在廉价磁盘冗余阵列(RAID)中应用 ...

  6. Java9 新特性 详解

    作者:木九天   <   Java9 新特性 详解  > Java9 新特性 详解 摘要: 1.目录结构 2.repl工具 jShell命令 3.模块化 4.多版本兼容jar包 5.接口方 ...

  7. Xcode9新特性介绍-中文篇

    背景: Xcode 9 新特性介绍: 1.官方原文介绍链接 2.Xcode9 be ta 2 官方下载链接 本文为官方介绍翻译而来,布局排版等都是按照官方布局来的. 与原文相比,排版上基本还是熟悉的配 ...

  8. Xcode8新特性和iOS10新特性

    从 Xcode 8.0 开始,目前所有的插件都无法工作! NSLog 无法输出 -- 此bug等待正式版本... Xcode 提供了文档注释快捷键option + cmd + / 但是要把系统升级到1 ...

  9. java8新特性学习:stream与lambda

    Streams api 对 Stream 的使用就是实现一个 filter-map-reduce 过程,产生一个最终结果,或者导致一个副作用(side effect). 流的操作类型分为两种: Int ...

随机推荐

  1. 使用Phalcon开发工具碰到的数据库问题"Table 'XXX' doesn't exist in database when dumping meta-data for XXX"

    使用Phalcon开发工具,通过命令行生成程序框架 设置好config.php,在对数据库进行读取.保存数据的时候出现了问题“Table 'XXX' doesn't exist in database ...

  2. 一些纯css3写的公司logo

      随着对css3了解得越深入,越来越发现了css3的强大.css3不但能完成一些基本的特效如圆角阴影等,还能借助动画技术实现一些复杂的动画,能替代很多以前js才能完成的工作,css3的作用还不止于此 ...

  3. dede栏目调用大全

    A:侧边栏常用的当前栏目的父栏目调用(5.7) 1.在include/common.inc.php增加函数 function getTopCategoryName($cid=0) { global $ ...

  4. Maven加依赖包

    对于初学maven的人来说刚开始会有个困惑,那就是怎么知道依赖的jar的groupId和atrifactId是什么, 比如要依赖mybatis,会在pom.xml中配置如下: <dependen ...

  5. Android的两种上下文的区别

    1.Activity.this,Activity是间接继承自Context 2.getApplicationContext()返回来的就是Context 3.getBaseContext()返回的也是 ...

  6. memcache保存php的session 解决多服务器的session问题

    PECL :: Package :: memcache 2.1.1 版本的 Changelog 中有一条: - Added experimental session storage support. ...

  7. ios 页面传值4种方式(一) 之全局变量

    通用的是用代理的方式实现页面传值,但是有时候利用其它方式也可以很巧妙的解决问题,页面传值一共有4种方式: 1.使用全局变量, SharedApplication,定义一个变量来传递. 2.使用文件,或 ...

  8. window 与ubuntu共享文件 hgfs下为空和不用每次挂载hgfs的方法

    解决hgfs为空的方法: sudo apt-get install open-vm-dkms sudo mount -t vmhgfs .host:/ /mnt/hgfs 解决每次都要挂载的方法: 1 ...

  9. (转)Visual Studio原生开发的10个调试技巧(二)

    我以前关于Visual Studio调试技巧的文章引起了大家很大的兴趣,以至于我决定分享更多调试的知识.以下的列表中你可以看到写原生开发的调试技巧(接着以前的文章来编号).这些技巧可以应用在VS200 ...

  10. Pitcher Rotation

    题意: n个人m个对手给出每个人能战胜每个敌人的概率,现在有g个比赛,每个人赛完后要休息4天(可重复用),求能获得胜利的最大期望个数. 分析: 因为只有每个人5天就能用一次,所以对于每个人来说,只有得 ...