对设计图做标注之iOS篇

导读:标注图是客户端进入企业级开发阶段后必不可少的一部分,好的标注图直接影响到客户端最后的还原与实现。随着iPhone的机型越来越多,不同机型上的屏幕大小还不一样,设计师在标注的过程中遇到了很多问题,我作为开发,在和设计师深入探讨后,最后和设计师达成了一个标注方案。这个方案没有什么新奇的地方,但很好的解决了我们碰到的问题。这篇文章会围绕标注过程中产生的问题,深入研究,详细解答,帮路人解惑。由于本人才疏学浅,如有大神路过,定要拍砖指正。

问题的由来

在泡沫上的iOS开发

08年的7月11号,当苹果发布iPhone3G并推出AppStore和iOS开发SDK之后,iOS开发正式出现了。随着iPhone的热卖,App作为移动互联网的入口凸现了它的巨大价值,无数创业团队开始纷纷开发自己的App,iOS开发的身价也是水涨船高。由于苹果提供了完善的开发工具和健全的App市场,App的设计与开发只能按照苹果的标准来,所以320X480的尺寸成了设计师们设计App的标准尺寸。

这个标准到2012年发布iPhone5之前一直是金科玉律,设计师无须关心什么是px(pixel),什么是pt(point),原因是早期的iPhone中,像素和点是对等的;后来虽然有点小插曲出了retina屏幕,设计师设计时也只需要把原来的尺寸放大一倍即可,开发人员会默认缩小一倍做开发。可以说苹果当时是非常照顾开发和设计人员的,即使升级了retina屏幕,开发和设计之间的默契马上会自动达成。但这也给之后埋下了隐患。

泡沫之后一地鸡毛

iPhone4s是乔布斯的遗作,但它也可以看作是小团队开发iOS应用浪潮中泡沫的分水岭。

之后问题开始慢慢暴露了。首先是iPhone5变长了,当时我们都挺惊讶的,连忙去确认了尺寸,发现屏幕从{320,480}变成了{320,568}。有经验的iOS开发通过动态计算屏幕高度马上解决了这个问题。然后,开发同学和设计同学沟通好,把效果图和标注图的尺寸改成了{640,1136}。这次苹果的改动其实并没有影响原来开发的方式和设计的原则,所以可是说是虚惊一场。
但是好景不长,iPhone6和iPhone6 Plus出现了,苹果第一次在一场发布会上发布2款不同尺寸的手机。这时候,iOS攻城狮心中是一群草泥马在万马奔腾。从那时起,开发和设计之间的问题就彻底暴露了。

当然,苹果也给了一个万金油的方案,如果我们什么都不改,App会在iPhone6和iPhone6 Plus等大屏手机上自动等比放大展示。作为企业级的App,怎么能容忍放大版的App在iPhone6 Plus上显示呢(因为它真的很大)。然后,我们给不同尺寸的机型补上了不一样的启动图(示意图如下)。


ImageSet中的启动图

验证完所有需要支持的iPhone机型,我们得到了4种不同的屏幕尺寸,分别是{320,480},{320,568},{375,667},{414,736}(示意图如下)。


屏幕尺寸比对图

这次苹果给工程师和设计师真的是留了一地鸡毛。

标注单位px和pt之争

开发之殇和设计之痛

开发同学一看到需要给App开发4种尺寸时,一开始的心态是闷逼的。设计人员也纳闷到底拿哪个尺寸做效果图呢。因为都没有经验,一开始我们继续让设计师用{640,1136}做标注图,这样我们结合屏幕的宽度和高度,可以很快的调整好不同尺寸下的布局。
随着iPhone6和iPhone6 Plus的大量普及以及高端Android手机市场份额的提升,之前{640,1136}做的效果图在真机上展示很不理想,于是设计师们把效果图的设计尺寸改成了{750,1334},而且还考虑用{1080,1920}做效果图。一般设计师们都是在效果图上直接做标注,由于效果图尺寸变成了{750,1334},我们iOS开发拿到标注图的尺寸也变成了{750,1334}。然后,开发拿着px做各种换算,碰到了各种奇怪的问题,做出来的页面和效果图的差距总是很大。我列举下几个常见的问题:

  • 文本高度总是算不对,导致布局总是不精确
  • 设计师看到大屏幕上的字体特别小,而小屏幕上的字体刚刚好,于是要求开发把大屏幕的字体放大1号,然后经常出现大屏手机的文字显示不全的情况。
  • 开发为了能适配小屏幕,根据宽度算了一个比例系数,实现页面时所有标注图上定长高的值都乘以该系数来等比缩放,后来发现小屏幕的效果就是不对。

其实,当设计师用小屏幕的规范去设计大屏幕时,设计稿已经出问题了。比如在小屏幕的时候,定义了最小字号为9号,9号字在PS上{750,1334}的设计图起来还可以,但在真机retina屏幕上看起来就很小,视觉落差特别大。设计师一看效果不对,就让开发加大字号;字号变大后,小屏幕的字体就感觉特别大,然后让开发分屏幕对待,小屏幕不变,大屏幕加大字号;开发拿着{750,1334}尺寸的px标注图,总感觉之前除以2后的宽高在小屏幕上显示不对,于是又用(屏幕宽度/320)搞了个比例系数,而且将错就错的在所有的宽高上乘以该系数。
然后在敏捷开发的团队里,设计师和工程师都开始怀疑人生了。设计师总感觉设计稿和真机效果差别很大,工程师总感觉实现的跟标注图不一致。最后只能通过海量的微调来达到看起来差不多的效果。

解铃还须系铃人——深入了解iPhone渲染机制

说到现在,我们差不多明白问题出在哪里了。
首先是设计师的设计规范需要修订了,之前用在小屏幕上的设计规范不能生搬硬套在大屏幕上,需要重新修订设计规范,兼顾小屏和大屏。
然后是工程师需要更加深入的了解iPhone的渲染机制了,否则px和pt会搞得傻傻分不清。有朋友会说,px和pt怎么会搞不清楚呢,1pt在iPhone6(包括iPhone6s)之前都是2px,在iPhone6 Plus和iPhone6s Plus上是3px。但是当你做出来的效果总是跟设计师的标注图不一样时,你是不是会怀疑自己实现错了。当你觉得设计师标注有问题时,你又怎么说明缘由然后告诉设计师一个误差较少的方案呢?你要明白设计师现在以不再是单独为iOS开发做设计了,还要兼顾Android和H5页面。

所以,我们需要静下来好好研究下iPhone现在是怎么渲染的,然后找到一个靠谱的方案让设计师对标注图做调整。

point(pt)和pixel(px)

在iOS开发中,point是抽象单位,它只在iOS系统给我们抽象出来的数字坐标系中有意义,与pixel没有直接的关系。之前我们常说1pt等于2px,1pt等于3px,这些等式之所以成立是因为我们无意识中都给等式加了一个附加条件,那就是在某种机型下。所以之后的机型说不定就有1pt等于4px,1pt等于5px的情况。

当我们在数字坐标系中绘制完界面后,iOS系统就开始在内存中渲染适合当前手机屏幕的页面尺寸,这个时候,渲染的单位就是pixel了。用基于点的图形使用像素进行渲染,这个过程叫做光栅化。像素坐标系是通过点坐标系乘以一个比例因子来获得的。比例因子越大,屏幕的像素密度越大,现实效果就越好。而我们常说的1倍、2倍、3倍就是比例因子。

但是在iPhone6Plus中,屏幕的物理像素只有{1080,1920},而内存渲染的像素却是3倍的点坐标系{1242,2208}。为了正常显示,iPhone6Plus在显示的时候做了一个缩减像素采样(downsampling)的操作。现在我们明白iPhone6Plus的屏幕分辨率为什么不是3倍了。

为了证明iPhone各种机型上渲染的像素是不同的,我们来比较下1个点宽度的线是怎么渲染的。下面是示意图:

iPhone渲染示意图
  • 早期的iPhone没有retina屏幕,比例因子是1。
  • iPhone5是retina屏幕,比例因子是2。
  • iPhone6 Plus是高清的视网膜显示屏,比例因子是3;渲染的图片被后期缩放,从2208X1242像素压缩到1920X1080像素。

这个缩放比率是 1920 / 2208 = 1080 / 1242 = 20 / 23。这意味着iPhone原始渲染的过程中,每23个渲染像素必须映射到20个物理像素上。换句话说,图片被缩放到了大约只有原始大小的87%。

下面,我们从宏观的角度来看看不同的iPhone机型是怎么适配的。请看下图:

iPhone适配方案

使用pt进行相对布局标注

搞清楚iPhone的渲染机制后,我们也知道了如何让设计师调整标注图了。之前,设计师为了兼顾Android和H5页面的效果图,把效果图大小调整为{750, 1334};考虑到工作量,设计师会在效果图上直接出标注,按照之前的约定默认的单位就px。对于开发人员,拿着{750, 1334}单位是px的标注图,他的第一反应是这是iPhone6的标注,iPhone6 plus和小屏的标注只能自己算了。下面我们拿左边距15px做例子:

各种情况 换算的意图 换算成pt
设计师给的iPhone6标注图 直接除以iPhone6的比例因子2 7.5pt
开发换算iPhone6 Plus的标注 直接除以iPhone6plus的比例因子3 5pt
开发换算小屏幕iPhone的标注 感觉除以比例因子不太对按除以2算 7.5pt
重新换算iPhone6 Plus的标注 通过宽度的比例来计算 7.5/(375/320)*(414/320) = 8.28

这么算下来,感觉pt总是算不对。问题出在不同手机屏幕上相等的视觉长度它们的像素是不同的,所以渲染15px的左边距,不同手机上的视觉边距都不一样。如果想在不同手机屏幕上让左边距看起来都一样,我们必须使用pt为单位,原因我们在上面介绍iPhone渲染机制中已作了说明,这里不再赘述。

其实,设计师关注的点也就是标注的内容在不同手机屏幕上显示的效果一样,比如左边距。对于特殊的适配情况,设计师自然会给不同分辨率下的标注。而之前的原因出在我们开发人员没有向设计师解释清楚不同屏幕上渲染相等的视觉长度,像素是不一样的,但渲染的point是一样的。后来,我们换成了pt作单位,绝大多数实现不准确的问题都被解决了,对于定高定宽的情况,标注时也做了特殊说明,而且也都换成了相对布局的方式进行标注;最后,拿一张我们最近的标注图做示例。

标注示例图

总结

终于写完了,感觉自己文笔有限,语句多不通顺,但你要明白一点,不同手机屏幕上渲染相等的视觉长度,pixel是不一样的,但渲染的point是一样的。希望这篇iOS标注解惑能让你了解pixel和point本质的区别。最后欢迎大家积极回复留言,交流心得。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,069评论 4 358
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,212评论 1 287
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 105,912评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,424评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,741评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,194评论 1 206
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,553评论 2 307
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,289评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,923评论 1 237
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,251评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,775评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,144评论 2 249
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,698评论 3 228
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,936评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,658评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,214评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,159评论 2 258

推荐阅读更多精彩内容

  • 声明:这里写的不是一种规范,只是一种工作方法,大家在具体工作中,一定要灵活运用。另外,技术的更新是非常快的,我写的...
    白屏阅读 9,363评论 20 100
  • 我本身是一名GUI设计师,所以我只站在GUI设计师的角度去把APP从项目启动到切片输出的过程写一写,相当于工作流程...
    felixmo阅读 2,162评论 2 52
  • 纯干货 UI上的精品文章,很有用,共享一下 iOS9使用的西文字体由Helvetica Neue变更为San Fr...
    UI_TING阅读 1,254评论 1 8
  • 很多时候,我们都忙碌在每天的撸图和改稿中,很少的去整理归纳结和思考工作的一些问题和方法,善于总结反思才能达到事半功...
    UI严选阅读 3,379评论 8 111
  • 文/添一抹岚 上午,母亲给我来了个电话。 她支支吾吾地说着扭伤的脚好多了,手关节的疼痛也减弱不少。田里的水稻成熟,...
    添一抹岚阅读 814评论 89 50