粗解Xcode 5新特性: Asset Catalogs
原文: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的更多相关文章
- xcode 10 新特性
这里主要介绍一下Xcode10 版本主要更新的内容.随着iOS12的发布,Xcode10已经可以从Mac App Store下载.Xcode10包含了iOS12.watchOS 5.macOS10.1 ...
- iOS 11系列 - Xcode 9新特性
Xcode 9最近刚刚发布,带来了一系列不错的新特性,可以更好的帮助到开发者完成开发工作. Xcode Runtime Tool Xcode 9中有许多Runtime Tool可以帮助开发者找到代码错 ...
- IOS学习【xcode 7新特性url链接】
由于xcode7的更新,在访问http链接的时候会输出错误信息 The resource could not be loaded because the App Transport Security ...
- Xcode 8 新特性
在2016 苹果全球开发者大会(WWDC)期间, 苹果一如既往地给开发者们披露了新版的集成开发工具 – Xcode, 在过去的每一次大版本发布中,苹果都会积极地改进开发工具,添加一些极具吸引力的新功能 ...
- 详解Hadoop3.x新特性功能-HDFS纠删码
文章首发于微信公众号:五分钟学大数据 EC介绍 Erasure Coding 简称EC,中文名:纠删码 EC(纠删码)是一种编码技术,在HDFS之前,这种编码技术在廉价磁盘冗余阵列(RAID)中应用 ...
- Java9 新特性 详解
作者:木九天 < Java9 新特性 详解 > Java9 新特性 详解 摘要: 1.目录结构 2.repl工具 jShell命令 3.模块化 4.多版本兼容jar包 5.接口方 ...
- Xcode9新特性介绍-中文篇
背景: Xcode 9 新特性介绍: 1.官方原文介绍链接 2.Xcode9 be ta 2 官方下载链接 本文为官方介绍翻译而来,布局排版等都是按照官方布局来的. 与原文相比,排版上基本还是熟悉的配 ...
- Xcode8新特性和iOS10新特性
从 Xcode 8.0 开始,目前所有的插件都无法工作! NSLog 无法输出 -- 此bug等待正式版本... Xcode 提供了文档注释快捷键option + cmd + / 但是要把系统升级到1 ...
- java8新特性学习:stream与lambda
Streams api 对 Stream 的使用就是实现一个 filter-map-reduce 过程,产生一个最终结果,或者导致一个副作用(side effect). 流的操作类型分为两种: Int ...
随机推荐
- jsp内置对象和el表达式
九个内置对象 *out jsp的输出流,用来向客户端响应 *page 当前jsp页面, 它的引用数据类型是Object,即真身中有如下代码 Object page=this; *config 它对应真 ...
- 我的oracle账号
1580909730@qq.com 密码:G961012gz
- Android custom View AirConditionerView hacking
package com.example.arc.view; import android.content.Context; import android.graphics.Canvas; import ...
- 8个必备的PHP功能开发 (转)
做过PHP开发的程序员应该清楚,PHP中有很多内置的功能,掌握了它们,可以帮助你在做PHP开发时更加得心应手,本文将分享8个开发必备的PHP功能,个个都非常实用,希望各位PHP开发者能够掌握. 1.传 ...
- spring的声明式事务内部图
- ecms_任意页面调用单独的栏目
<a href="<?=$class_r[58]['classpath']?>"> <?=$class_r[58]['classname']?> ...
- ECSHOP 商品评论条件修改——购买过该商品且只能评价一次(购买多少次能评价多少次)
下文转自http://bbs.ecshop.com/thread-1131529-1-1.html ECSHOP 商品评论条件修改,修改为购买过该商品多少次,就只能评价多少次.不需要修改数据库,原理简 ...
- 利用android proguard混淆代码
利用android proguard混淆代码 2014-02-05 17:50 1207人阅读 评论(1) 收藏 举报 网上虽然有很多相关博客,不过貌似都不是最新版的..于是百度+谷歌+github上 ...
- 【转】Linux设备驱动之mmap设备操作
原文网址:http://www.cnblogs.com/geneil/archive/2011/12/08/2281222.html 1.mmap系统调用 void *mmap(void *addr, ...
- c#中const、static、readonly的区别
1. const与readonly const ,其修饰的字段只能在自身声明时初始化. Readonly 是只读变量,属于运行时变量,可以在类初始化的时候改变它的值.该类型的字段,可以在声明或构造函数 ...