CS193笔记 第十四讲 动态动画演示

同一图像的不同分辨率的资源

因为如今iOS设备众多,不同的设备具有不同的分辨率。为同一图像提供多个分辨率的版本可以使应用载入最适配的资源。

下面我们通过一个实验来理解各种分辨率的使用和异同。
我PS了一个120x150的png图像文件,以其为蓝本生成了8个文件如下。
lion1.png [email protected] [email protected]
lion12.png [email protected]
lion123.png [email protected] [email protected]
所有文件的分辨率都相同,@2x版本和@3x版本的图像上分别有数字2或3

新建一个project, 将上述8个文件拖入Asssets.xcassets 得到结果如下


CS193笔记 第十四讲 动态动画演示_第1张图片
overview

文件名中的数字表明该文件有对应分辨率的版本

打开Main.storyboard。创建5个image view,大小设为120x150,content mode 设为 top。
分别选择view as iPhone7 和 view as iPhone7 Plus 得到如下图中的结果。

CS193笔记 第十四讲 动态动画演示_第2张图片
iPhone7
CS193笔记 第十四讲 动态动画演示_第3张图片
iPhone7p

屏幕的方向不影响结果。除iPhone 7Plus外,其余情况下(包括pad)显示结果相同。当然这里也不包含非retina屏的情况了。

总结:

非plus的情况下,首选@2x分辨率,没有@2x 则选正常分辨率但不会使用@3x版本。
plus的情况下,首选@3x分辨率,没有选@2x,还没有则选正常分辨率

所以@2x版本的资源是必须要提供的。提供@3x资源可以更好地适配iPone plus. 正常分辨率的可以忽略了。

一个典型的应用 lazy 初始化的情况


private var asteroidField: AsteroidFieldView!
private lazy var animator: UIDynamicAnimator = UIDynamicAnimator(referenceView: self.asteroidField)

animator 初始化时引用了另一个成员asteroidField,需要使用lazy 并显示指明类型UIDynamicAnimator 而且还要明确asteroidField是类成员还是实例成员(用self.限定)

本讲的演示略。

这个演示是一个游戏场景。但同样的事情更适合用spritKit实现。这种动态动画更适合的场景应该是那种炫酷的场景(view)间的切换。 有机会要试试。再补充本节的内容。

你可能感兴趣的:(CS193笔记 第十四讲 动态动画演示)