总动员就总动员,皮克斯还是皮克斯囧

作者:王中王开奖

 

   很久很久以前就决定即使今年夏天天天喝粥也要到电影院里去看WALL.E,可惜直到手中捏着的兑换券被捏出水来也没有等到电影院门口出现脑残的机器人总动员海报,去港澳台看迫于囊中羞涩无人埋单,可即便去能美国投奔富有的老姐,等签证出来飞他个几十个钟头到那里,老里八早就下片洗洗睡了。
    还好豆瓣上高人多,在得出原来我家门口卖各种d9、d5、highdvd的兄台是广电总局人士的结论之后,我是不指望今年能为各大影院贡献上留有余温的票房收入了。
    所谓破罐子破摔,看不了IMAX看不了BD看不了DVD我就在我17寸CRT上看TS版,管他什么特效音效,我就不信皮克斯的电影不好看,当年在小琛子家里一伙人对着那台画面抖得很有艺术感的18寸电视看“怪物公司”,结果四个人笑得全从床上翻到地上,去年我在某周一看了DVDRIP的“美食总动员”,之后一直推荐别人去电影院看,结果自己比人家更早周三就去电影院瞅了,还是国语配音版。
    皮克斯那就是神啊,我看着屏幕上模模糊糊的WALL.E和EVE,字幕也没不过基本上都是那种R2D2的机器语-_-b,但是片子最后耳机里传出WALL.E的那一句抖活活的“E.....VE”,我还是感动得忍不住抓起身边的窗帘......擦汗......为了省电看片子的时候空调还是免了吧。
    不管是今年、明年还是后年,我一定要等到广电总局那帮人的大脑沟回恢复正常。

     动画是IOS开发过程中很重要的一块知识点,平移,旋转,翻转,改变透明度等,我们开发需求中时不时就会遇到,有时还会遇到更加复杂的动画需求,这就要求我们IOS开发者必须对动画知识点有一定的了解。

 

按照IOS动画的发展史和复杂程度,我给他们分为以下几部分。

 

1.事物动画 

 

       这是IOS动画最初面对UI层使用的动画,为什么我叫他事物动画大家看下代码就明白了。

 

图片 1

第五章

事物动画实例代码

动画总动员──皮克斯的前世今生

 

 

 

 

2.普通的Block动画

   相对于事物动画,代码结构看着更加美观,简单易用,链式调用,Block回调动画真正的内容,开发代码中几乎都是使用Block动画。

图片 2

普通Block动画代码示例

3.Spring-Block动画

     这是IOS7.0以后加入的新特性,动画可以弹式跳动等新的特性。

usingSpringWithDamping就是代表弹式跳动,数值是[0,1];

initialSpringVeloccity代表初始化速度,数值也是[0,1];

图片 3

Spring-Block动画

4.UIView切换动画

一般用在UIView的出现在视图中或者消失在视图中的切换动画。

图片 4

UIView切换动画

5.Frames动画

这个类型的动画相对复杂度要高些,也是IOS7.0以后才有的动画内容。

帧动画的真正的动画内容其实是addKeyframeWithRelativeStartTime:代表相对于总动画开始以后的我这个分动画的相对开始时间,这就是帧动画每个分动画,所有这些分动画加载一起执行完成就是我们要执行的帧动画。

图片 5

帧动画的实例代码

6.属性动画CABaseAnimation

      属性动画,其实是叫核心动画,但是我个人感觉叫属性动画会更贴切些,通过指定keyPath属性,来确定UIView要执行的动画的属性,比如位置position,path,posiion.x,transfor.rotation.y等,然后通过设置fromVlue和toValue来设置动画的起始值,然后把动画加入到UIView的layer中来执行动画。

      属性动画其实内部包括两部分,视图显示部分和属性数据部分,我们能看到就是视图显示部分,大部分情况下我们看到只是假象并不是UIView真实情况,比如下面的例子,我们看着lable是停在了动画结束的地方end点的位置,其实我们看到的这只是lable躯壳,他的灵魂依然在start点的位置,如果我们给lable设置了点击事件,我们点击我们最后看到lable的位置end,lable并不会有反应,反而点击原来lable的start的位置会响应点击事件,因为移动过去的只是lable视图层,他的属性数据并没有移动,所以如果我们要想在end位置lable也有点击事件,必须该表属性数据让他跟视图层同步一样。

图片 6

属性动画

注:数据与显示的同步

        虽然上面的代码removeOnCompletion=NO和fileMode=KCAFillModeForwards保证了动画视图层停止到了终点,没有回到动画的原点,但是这只是最后一帧,而且视觉效果也不算完美,这是因为数据层和视图显示层不同步导致的,此时的数据层还是动画前的数据,所以我们要更改数据层的数据让他跟视图层的数据同步,方法就是我们只给动画CABaseAnimation设置fromValue不设置toValue,而是直接把toValue的值设置给数据层,这样不但视图上更完美了,而且还使视图跟实际数据统一,不会导致视图显示的位置和响应点击事件的位置不一样的尴尬事件产生。实例代码如下:

图片 7

UIView属性层数据和视图层数据同步

我们可以扩展到任意的CAAnimation对象,比如CAKeyFrameAnimation和CABaseAnimation等。

以上是本人研究IOS动画的个人见解,难免会有纰漏,欢迎大神指点,也欢迎打赏关注。

以后有时间会添加CALayer及其子类的使用,比如CAShaperLayer,CATextLayer和CAGradientLayer等,如感兴趣请多多关注。

本文由王中王开奖结果发布,转载请注明来源

关键词: