潜伏期值得思考 - 凯文 帕萨特在第13章“高效绘图”中,我们研究了和Core Graphics绘图相关的性能问题,以及如何修复。和绘图性能相关紧密相关的是图像性能。在这一章中,我们将研究如何优化从闪存驱动器或者网络中加载和显示图片。加载和潜伏绘图实际消耗的时间通常并不是影响性能的因素。
不必要的效率考虑往往是性能问题的万恶之源。——William Allan Wulf在第12章『速度的曲率』我们学习如何用Instruments来诊断Core Animation性能问题。在构建一个iOS app的时候会遇到很多潜在的性能陷阱,但是在本章我们将着眼于有关绘制的性能问题。软件绘图术语绘图通常在Core Animation的上下文中指代软件绘图(意即:不由GPU协助的绘图)。
代码应该运行的尽量快,而不是更快 - 理查德在第一和第二部分,我们了解了Core Animation提供的关于绘制和动画的一些特性。Core Animation功能和性能都非常强大,但如果你对背后的原理不清楚的话也会降低效率。让它达到最优的状态是一门艺术。在这章中,我们将探究一些动画运行慢的原因,以及如何去修复这些问题。
我可以指导你,但是你必须按照我说的做。 -- 骇客帝国在第10章“缓冲”中,我们研究了CAMediaTimingFunction,它是一个通过控制动画缓冲来模拟物理效果例如加速或者减速来增强现实感的东西,那么如果想更加真实地模拟物理交互或者实时根据用户输入修改动画改怎么办呢?在这一章中,我们将继续探索一种能够允许我们精确地控制一帧一帧展示的基于定时器的动画。
生活和艺术一样,最美的永远是曲线。 -- 爱德华布尔沃 - 利顿在第九章“图层时间”中,我们讨论了动画时间和CAMediaTiming协议。现在我们来看一下另一个和时间相关的机制--所谓的缓冲。Core Animation使用缓冲来使动画移动更平滑更自然,而不是看起来的那种机械和人工,在这一章我们将要研究如何对你的动画控制和自定义缓冲曲线。
时间和空间最大的区别在于,时间不能被复用 -- 弗斯特梅里克在上面两章中,我们探讨了可以用CAAnimation和它的子类实现的多种图层动画。动画的发生是需要持续一段时间的,所以计时对整个概念来说至关重要。在这一章中,我们来看看CAMediaTiming,看看Core Animation是如何跟踪时间的。
如果想让事情变得顺利,只有靠自己 -- 夏尔·纪尧姆上一章介绍了隐式动画的概念。隐式动画是在iOS平台创建动态用户界面的一种直接方式,也是UIKit动画机制的基础,不过它并不能涵盖所有的动画类型。在这一章中,我们将要研究一下显式动画,它能够对一些属性做指定的自定义动画,或者创建非线性动画,比如沿着任意一条曲线移动。属性动画首先我们来探讨一下属性动画。
按照我的意思去做,而不是我说的。 -- 埃德娜,辛普森我们在第一部分讨论了Core Animation除了动画之外可以做到的任何事情。但是动画是Core Animation库一个非常显著的特性。这一章我们来看看它是怎么做到的。具体来说,我们先来讨论框架自动完成的隐式动画(除非你明确禁用了这个功能)。事务Core Animation基于一个假设,说屏幕上的任何东西都可以(或者可能)做动画。
复杂的组织都是专门化的Catharine R. Stimpson到目前为止,我们已经探讨过CALayer类了,同时我们也了解到了一些非常有用的绘图和动画功能。但是Core Animation图层不仅仅能作用于图片和颜色而已。本章就会学习其他的一些图层类,进一步扩展使用Core Animation绘图的能力。CAShapeLayer在第四章『视觉效果』我们学习到了不使用图片的情况下用CGPath去构造任意形状的阴影。
很不幸,没人能告诉你母体是什么,你只能自己体会 -- 骇客帝国在第四章“可视效果”中,我们研究了一些增强图层和它的内容显示效果的一些技术,在这一章中,我们将要研究可以用来对图层旋转,摆放或者扭曲的CGAffineTransform,以及可以将扁平物体转换成三维空间对象的CATransform3D(而不是仅仅对圆角矩形添加下沉阴影)。
嗯,圆和椭圆还不错,但如果是带圆角的矩形呢?我们现在能做到那样了么?史蒂芬·乔布斯我们在第三章『图层几何学』中讨论了图层的frame,第二章『寄宿图』则讨论了图层的寄宿图。但是图层不仅仅可以是图片或是颜色的容器;还有一系列内建的特性使得创造美丽优雅的令人深刻的界面元素成为可能。在这一章,我们将会探索一些能够通过使用CALayer属性实现的视觉效果。
不熟悉几何学的人就不要来这里了 --柏拉图学院入口的签名在第二章里面,我们介绍了图层背后的图片,和一些控制图层坐标和旋转的属性。在这一章中,我们将要看一看图层内部是如何根据父图层和兄弟图层来控制位置和尺寸的。另外我们也会涉及如何管理图层的几何结构,以及它是如何被自动调整和自动布局影响的。
图片胜过千言万语,界面抵得上千图片 ——Ben Shneiderman我们在第一章『图层树』中介绍了CALayer类并创建了一个简单的有蓝色背景的图层。背景颜色还好啦,但是如果它仅仅是展现了一个单调的颜色未免也太无聊了。事实上CALayer类能够包含一张你喜欢的图片,这一章节我们将来探索CALayer的寄宿图(即图层中包含的图)。
巨妖有图层,洋葱也有图层,你有吗?我们都有图层 -- 史莱克Core Animation其实是一个令人误解的命名。你可能认为它只是用来做动画的,但实际上它是从一个叫做Layer Kit这么一个不怎么和动画有关的名字演变而来,所以做动画这只是Core Animation特性的冰山一角。
核心动画是基于苹果iOS用户界面的技术。通过使用核心动画的全部功能,可以用2D和3D视觉效果来提升应用程序并创造炫酷的全新接口。iOS开发者尼克·洛克伍德会带你一步一步体验Core Animation框架,通过示例代码和图表加深理解。
前面两篇我们讲解了使用layoutAnimation和LayoutTransition实现ViewGroup中Item加载动画的方法,但他们都各自存在问题:layoutAnimation虽然是API 1中就已经引入,但只能在动画初次创建时才能使用指定动画。控件创建以后,再往ViewGroup里加Item就不会再有动画。这显然是不合适的!LayoutTransition能够实现无论何时往ViewGroup中添加控件都可以给其中控件使用动画。
前篇给大家讲了LayoutAnimation的知识,LayoutAnimation虽能实现ViewGroup的进入动画,但只能在创建时有效。在创建后,再往里添加控件就不会再有动画。在API 11后,又添加了两个能实现在创建后添加控件仍能应用动画的方法,分别是android:animateLayoutChanges属性和LayoutTransition类。这篇文章就来简单说一下他们的用法。由于他们的API 等级必须>
前几篇给大家讲述了如何针对某一个控件应用动画,这篇将给大家讲解如何给容器中的控件应用统一动画。即在容器中控件出现时,不必为每个控件添加进入动画,可以在容器中为其添加统一的进入和退出动画。 从上面的示例动画也可以看出,listview 中的数据在进入时就加入了统一动画,下面我们就来看看这些是怎么来实现的吧。
上篇给大家讲了有关 AnimatorSet 的代码实现方法,这篇我们就分别来看看如何利用 xml 来实现 ValueAnimator、ObjectAnimator 和 AnimatorSet;在文章最后,将利用 AnimatorSet 来实现一个路径动画,效果图如下: (这里实现的是一个动画菜单,在点击菜单按钮时,弹出各个菜单)一、联合动画的 XML 实现在 xml 中对应 animator 总共有三个标签,分别是<animator />
上几篇给大家分别讲了 ValueAnimator 和 ObjectAnimator,相比而言 ObjectAnimator 更为方便而且由于 set 函数是在控件类内部实现,所以封装性更好。而且在现实使用中一般而言都是使用 ObjectAnimator 的机率比较大。但 ValueAnimator 和 ObjectAnimator 都只能单单实现一个动画,那如果我们想要使用一个组合动画,比如边放大,边移动,边改变 alpha 值,要怎么办。
关注时代Java