【WWDC2016 Session笔记】 iOS 10 UICollection

前言
关于 iOS 10 的新特性,主要还是体现在如下3个方面
现在基本上人人都离不开手机,手机的app也每天都有人在用 。一个app的好坏由它的用户体验决定 。在可以滑动的视图里面,必须要更加丝滑柔顺才能获得用户的青睐 。这些的新特性可以让你们的app比原来更加顺滑,而且这些特性只需要你加入少量的代码即可达到目的 。
self-的API在iOS8的时候被引进,iOS10中加入更多特性使cell更加容易去适配 。
这个功能在iOS9的时候介绍过了,苹果在iOS 10的API里面大大增强了这一功能 。
目录
1.顺滑的滑动体验
2.的Pre-预加载
3.的Pre-预加载
4.针对self-的改进
5.
6.
一. 顺滑的滑动体验
众所周知,iOS设备已良好的用户体验赢得了广大的用户群 。iOS系统在用户点击屏幕会立即做出响应 。而且很大一部分的操作是来自于用户的滑动操作 。所以滑动的顺滑是使用户沉浸在app中享受的必要条件 。接下来我们就谈谈iOS 10 中增加了那些新特性 。
我们先来看一下之前的体验,假设我们每个cell都是简单的蓝色,实际开发app中,cell会比这复杂很多 。我们先生成100个cell 。当用户滑动不是很快的时候,还感觉不出来卡顿,当用户大幅度滑动,整个的卡顿就很明显了 。如果整个cell的又是从网络加载的,那就更加卡顿了 。效果如下图 。
如果这种app上架,用户使用过后,很可能就直接给1星评价了 。但是为什么会造成这种问题呢?我们来分析一下,我们模拟一下系统如何处理重用机制的,效果如下图 。
在上图中,我们可以看出,当cell准备加载进屏幕的时候,整个cell都已经加载完成,等待在屏幕外面了 。而且更重要的是,在屏幕外面等待加载的cell是整整一行!这一行的cell都已经加载完数据 。这是在用户大幅度滑动时卡顿的根本原因 。用专业的术语来说,掉帧 。
接下来我们就来详细的说说掉帧的问题 。
当今的用户是很挑剔的,用户需要一个很顺滑的体验,只要有一点卡顿,很可能一言不合就卸载app了 。要想用户感觉不到卡顿,那么我们的app必须帧率达到60帧/秒 。用数学换算一下就是每帧16毫秒就必须刷新一次 。
我们用图标来分析一下掉帧的问题 。下面会出现2种不同的帧 。
我们换种方式在说明一下2种情况下掉帧的情况 。我们用下图的标准来衡量一下上面2种情况 。下图分为2部分,上面红色的区域,就是表示掉帧的区域,因为高于16ms 。红色和绿色区域的分界线就在16ms处 。y轴我们表示的是CPU在主线程中花费的时间 。x轴表示的是在用户滑动中发生的刷新事件 。
针对上述掉帧的情况,绘制出实验数据,如下图 。值得我们关注的是,曲线是很曲折的,非常的不平滑 。当用户大幅度滑动的时候,峰值超过了16ms,当用户慢速滑动的时候,帧率又能保持在比较顺滑的区域 。处于绿色区域内的cell加载压力都是很小的 。这就是时而掉帧时而顺滑的场景 。这种场景下,用户体验是很糟糕的 。
那怎么解决这么问题的呢?我们来看下图:
上图中的曲线我们看着就很平缓了,而且这种情况也不会出现掉帧的情况了,每个滑动中的时间都能达到60帧了 。这是怎样做到的呢?因为把每个cell的加载事件都平分了,每个cell不会再出现很忙和很闲的两个极端 。这样我们就取消了之前的波峰和波谷 。从而让该曲线达到近乎水平的直线 。
如何让每个cell都分摊加载任务的压力?这就要谈到新的cell的生命周期了 。
先来看看老的 的声明周期 。当用户滑动屏幕,屏幕外有一个cell准备加载显示进来 。