<h4>同一图像的不同分辨率的资源</h4><p>因为如今iOS设备众多,不同的设备具有不同的分辨率。为同一图像提供多个分辨率的版本可以使应用载入最适配的资源。</p>
下面我们通过一个实验来理解各种分辨率的使用和异同。
我PS了一个120x150的png图像文件,以其为蓝本生成了8个文件如下。
lion1.png lion2@2x.png lion3@3x.png
lion12.png lion12@2x.png
lion123.png lion123@2x.png lion123@3x.png
所有文件的分辨率都相同,@2x版本和@3x版本的图像上分别有数字2或3
新建一个project, 将上述8个文件拖入Asssets.xcassets 得到结果如下
文件名中的数字表明该文件有对应分辨率的版本
打开Main.storyboard。创建5个image view,大小设为120x150,content mode 设为 top。
分别选择view as iPhone7 和 view as iPhone7 Plus 得到如下图中的结果。
屏幕的方向不影响结果。除iPhone 7Plus外,其余情况下(包括pad)显示结果相同。当然这里也不包含非retina屏的情况了。
<h4>总结:</h4><p>非plus的情况下,首选@2x分辨率,没有@2x 则选正常分辨率但不会使用@3x版本。
plus的情况下,首选@3x分辨率,没有选@2x,还没有则选正常分辨率
所以@2x版本的资源是必须要提供的。提供@3x资源可以更好地适配iPone plus. 正常分辨率的可以忽略了。</p>
<h4>一个典型的应用 lazy 初始化的情况 </h4><pre>
private var asteroidField: AsteroidFieldView!
private lazy var animator: UIDynamicAnimator = UIDynamicAnimator(referenceView: self.asteroidField)
</pre>
<p><code>animator</code> 初始化时引用了另一个成员<code>asteroidField</code>,需要使用lazy 并显示指明类型<code>UIDynamicAnimator</code> 而且还要明确<code>asteroidField</code>是类成员还是实例成员(用<code>self.</code>限定)</p>
<h4>本讲的演示略。</h4>
这个演示是一个游戏场景。但同样的事情更适合用spritKit实现。这种动态动画更适合的场景应该是那种炫酷的场景(view)间的切换。 有机会要试试。再补充本节的内容。