iPhone 实现动画效果

来源:互联网 发布:网络推广方面的书籍 编辑:程序博客网 时间:2024/05/18 00:03

(虽然标记的是原创,但是大部分都是书上的,个人学习过程中,学完这段写点儿东西总结下,本想贴上demo程序的,竟然没找到上传附件的地方。。。)

iPhone中实现动画,主要有两种方式:UIView的动画块和Core Animation的CATransition类。

 

1、UIView的动画块 

之所以称为动画块,是因为UView动画是成块运行的,也就是说作为完整的事务一次性运行。

beginAnimation:context:标志动画块开始;

commitAnimations标志动画块结束。(这个commit多少已经暗示这个操作是事务性的)

这里面通常涉及4个操作:

beginAnimation:context:标志动画块开始

setAnimationCurve:定义动画加速或减速的方式,有四种,ease-in/ease-out,ease-in,linear,ease-out

setAnimationDuration:定义动画持续时间(以秒为单位)

commitAnimations:标志动画块结束

所有这些操作都是针对UIView的,或者说是UIView的类函数。给段代码示例:

 

(这里面设置了动画的delegate,在动画结束后执行animationFinished:函数)

UIView除了实现上面这种简单的动画,还支持视图的翻转。例如在上面代码的[UIView commitAnimations]前加上下面这句,便可以实现视图的翻转(翻转后的试图中,imageView的大小变为原来的0.25倍):

[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];

其中,参数UIViewAnimationTransitionFlipFromLeft定义了翻转的方式。参见文后的表格,列出了所有的翻转方式。

2、Core Animation (CA)

这种方式提供了高度灵活的动画解决方案(书上说的,我还没体会到有多灵活。。。)。CA只是针对图层,不针对视图。

这里说的图层就是视图的默认图层([myView layer],UIView的文档中,关于这个属性也没多说什么,只是说这个属性以uivew作为delegate,并且该属性不可能为空)。下面展示一段用CA实现视图过渡的代码:

 

从代码可以看出,基本方式和第1点介绍的UIView的动画块差不多,先是开始,然后设置视图的变化,然后结束。

CATransition的type有四种,见最后的视图过渡类型表格。

subtype也是四种,分别是从上、下、左、右进入。

其实,上面这段代码,并不是使用CA的一般方式(或者说通用方式),下面展示下一般方式:

 

(这段代码纯粹书上借鉴的,来自于www.lucasnewman.com中的一个示例。)

代码中使用了key path,KVC的强大又一次体现。

附录:Cocoa中视图过渡的方式

 

UIViewAnimationTransitionFlipFromLeftUIView过渡,从左向右翻转

UIViewAnimationTransitionFlipFromRightUIView过渡,从右向左翻转

UIViewAnimationTransitionFlipCulUpUIView过渡,从下向上翻转,翻页效果,非常不错

UIViewAnimationTransitionFlipCulDownUIView过渡,从上向下翻转

 

kCATransitionFadeCA交叉淡化过渡

kCATransitionMoveInCA过渡,新视图移到旧视图上

kCATransitionPushCA过渡,新视图将旧视图挤开

kCATransitionRevealCA过渡,将旧视图移开,显示出下面的新视图

原创粉丝点击