iOS动画技术笔记

来源:未知 责任编辑:责任编辑 发表时间:2014-02-02 17:44 点击:

概述
在IOS开发中,实现动画操作的地方有很多,典型的是在视图控制器的segue操作时。在同一个视图控制器类中,加载切换不同的视图时,也需要动画效果,还有一些视图对象有动画效果会更好。

插一句,在IOS开发过程中,感觉自己就像一个导演在工作,安排不同的布景,不同的画面切换。应用有了流畅的画面,会增色不少。

在storyboard中创建视图和视图控制器时,会有一些动画设置。但在代码角度上,我们还是需要理解一下这个动画设置的实现过程。

动画实现在不同的视图控制器切换操作时如presentViewController或popViewController时,使用的是CATransition。

CATransition其实也是基于layer的实现,用于切换不同的视图,但它能实现的效果有限。例如,不能满足两个视图控制器的视图在一个windows上展现的动画。我是想使用panGestureController实现来自于两个视图控制器的视图动画显示效果,这点很遗憾。

在同一视图控制器上的不同视图的动画切换,可以使用UIView 的beginAnimations:nil 或animateWithDuration:animations:completion:等方法来实现。

动画实现也就是通过修改视图一些属性,在设定时间能反复或逐步完成这些修改操作,达到动画展现的效果。

这些属性如下所示:

1.frame,bounds,center//改变View的frame属性

2.alpha //改变透明度

3.backgroundColor//改变背景颜色

4.contentStretch//拉伸变化

5.transform//仿射变换,其中又包括Rotate,Invert,Translate,Scale(旋转,反转,位移,缩放)

普通的动画都是30帧每秒,肉眼能识别的是24帧每秒,而在游戏上会要求是60帧每秒。

这些视图就是在设置的时间内,根据时间函数如缓入、缓出等,修改它的这些属性。修改一次,变成一个,周而复始。在我们肉眼看来,这就是一个连续的动作,就是动画。

这里说到UIView的属性,就不能不说它的组成。UIView其实是由layer组成的。UIView的这些属性如bounds,center都是来自于CALayer的对象。

在视图的layer上,将CAAnimation的对象添加进来就能实现视图的动画效果。CAAnimation是一个抽象类,它的实体类有CABasicAnimation 和CAKeyframeAnimation 。

通过CABasicAnimation或CAKeyframeAnimation 对象的定义,将它加入到UIView.layer中去,实现动画效果。注意,动画完成后,layer的属性定义又恢复到初始值。如果要保存动画结果,那么需要在添加动画到layer时做约定设置。

例如,在一个视图中加一个UIImage对象,声明一个CALayer的图层对象,将该图层的contents设置为UIImage对象的CGImage,然后在这个图层对象做处理。

首先,声明一个CABasicAnimation的对象scaleAnimation的keyPath为transform.scale。

CABasicAnimation *scaleAnimation = [CABasicAnimationanimationWithKeyPath:@"transform.scale"];

然后,设置keyPath的值,动画执行时间,动画执行时间函数。如果需要在动画结束后将结果保存下来,则需要在delegate的方法- (void)animationDidStop:(CAAnimation*)theAnimation finished:(BOOL)flag中去实现。

   scaleAnimation.toValue =scaleFactor;

   scaleAnimation.duration =3.0f;

   scaleAnimation.timingFunction= [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

最后,将CABasicAnimation的对象scaleAnimation加到图层中去,剩下就由IOS自己去实现,代码上就到这一步了。

   [self.view.layeraddSublayer:logoLayer];

详细的代码如下

- (void)viewDidLoad {

   [super viewDidLoad];

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Lexical or Preprocessor Issue 'xxx.h
  • ios学习笔记(二)xcode 4.3.2下实现基本交互
  • ios版本的helloworld
  • iphone(object-c) 内存管理(3) 有效的内存管理 前半部分
  • ios学习笔记(一)xcode 4.3.2下创建第一个ios项目
  • UITableView一些方法
  • IOS类似iphone通讯录TableView的完整demo【附源码】
  • [iPhone中级]iPhone团购信息客户端的开发 (二)
  • iphone(object-c)内存管理(1)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1