一、仿射变换--CGAffineTransform

1.仿射变换,一种基于二维坐标的转换功能。CGAffineTransform数据结构代表一个二维坐标系的转换矩阵。
2.通过CGAffineTransform数据结构,可以构造二维坐标系内的平移、伸缩、旋转矩阵。详情可以参看苹果开发文档中关于该数据结构的解释。
3.UIView类的一个属性:transform,该属性相对于bounds的中心位置,该属性的类型为CGAffineTransform。初始化一个CGAffineTransform结构的矩阵,然后赋值给这个属性,就可以完成二维坐标系内的转换。
4.要形成动画,可以使用第三部分(UIView集成动画API)表述的方式,通过指定该属性的前后状态来形成动画,或者自己动态设置这个属性的值来形成动画。
二、三维变换--CATransform3D
1.CATransform3D数据结构代表一个三维坐标系的矩阵,通过它可以构造三维坐标系内的平移、伸缩、旋转矩阵。
2.UIView类的layer.transform属性,该属性相对于bounds的中心位置。该属性的类型为CATransform3D。该属性的使用方式以及动画的形成,同上一部分,但是使用这个属性实现三维动画,可能没那么好控制。
三、UIView集成的动画API
1.UIView集成了一系列的动画API。她的原理类似于flash动画的制作,我们指定物体(控件)某些属性在动画中的开始和结束状态,动画API就会自动生成中间的帧,从而生成动画。
2.使用示例(iOS4之前):
    //在这里指定控件的开始状态
    //xxxxxxxxxx
    [UIView beginAnimations:context:];
    [UIView setAnimationDuration:];
    [UIView setAnimationCurve:];
    [UIView setAnimationDelegate:];
    [UIView setAnimationWillStartSelector:@selector(animationDidStart:context)];
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context)];
    //在这里指定控件的结束状态
    //xxxxxxxxx
    [UIView commitAnimations];
    代理方法的声明要使用如下方式:
    (void)animationDidStart:(NSString *)animationID context:(void *)context
    (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
3.使用示例(iOS4及以后)
(1)从iOS4系统之后,第2点提到整套API被废弃了,应该使用block的方式来生成动画。API列表如下:
   animateWithDuration:delay:options:animations:completion:
   animateWithDuration:animations:completion:
   animateWithDuration:animations:
   transitionWithView:duration:options:animations:completion:
   transitionFromView:toView:duration:options:completion:
(2)使用此套API的时候,将控件的结束状态写在block中就可以了。
4.因为此系列API只指定动画的开始和结束状态,所以只能做一些有规律的动画,否则API会不知道如何生成中间帧。常用动画举例:平移,伸缩,旋转,透明度变化,颜色变化等等。
四、核心动画
1.比较常用的动画类:CATransition和CAAnimation。
(1)CATransition用于使用系统集成的动画。
(2)CAAnimation用于实现自定义动画,但是它是一个抽象类,不能直接使用,要子类化才能使用。类库中存在已经子类化的类可以使用,比如CAKeyframeAnimation,此类通过给一个layer的属性指定一组值,包含开始、结束以及中间的一些用来修正动画的值,然后根据这些值,生成每一帧,来生成动画。
2.CATransition动画实现示例:
   CATransition *transition = [CATransition animation];
   transition.duration = 0.8;
   transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
   transition.type = @"cube";
   transition.subtype = kCATransitionFromRight;
   [xxxView.layer addAnimation:transition forKey:nil];
3.CAAnimation使用示例:
   CGFloat perAngle = M_PI / 64; 
   CAKeyframeAnimation *keyFrameAnination = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
   [keyFrameAnination setDuration:2.0f];
   [keyFrameAnination setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
   [keyFrameAnination setRemovedOnCompletion:NO];
   [keyFrameAnination setFillMode:kCAFillModeForwards];
   [keyFrameAnination setDelegate:self];
   NSMutableArray *values = [[NSMutableArray alloc]initWithCapacity:10];
   for (CGFloat clipRdn = angle; clipRdn >= 0; clipRdn -= perAngle) {
        CATransform3D transform = CATransform3DMakeRotation(clipRdn, 0.0f, 1.0f, 0.0f);
        transform.m34 = sin(clipRdn) / 4000.0f;
        transform.m14 = -sin(clipRdn) / 4000.0f;
        [values addObject:[NSValue valueWithCATransform3D:transform]];
   }
   [keyFrameAnination setValues:values];
   [values release];
   [self.imageView.layer addAnimation:keyFrameAnination forKey:@"animation"];

iOS简单动画实现方案相关推荐

  1. iOS 简单动画汇总

    iOS 简单动画主要分为三种(这是我的理解): 第一种:改变位置,大小等 //开始动画 [UIView beginAnimations:nil context:nil]; //设定动画持续时间 [UI ...

  2. iOS 简单动画效果

    1.最简单,最实用,最常用的[移动动画] //移动一个view -------------------------------------------------------------------- ...

  3. iOS CAReplicatorLayer 简单动画

    代码地址如下: http://www.demodashi.com/demo/11601.html 写在最前面,最近在看学习的时候,偶然间发现一个没有用过的Layer,于是抽空研究了下,本来应该能提前记 ...

  4. 直播App中Android酷炫礼物动画实现方案(上篇)

    在当下移动直播火爆的年代,如果你曾经使用过移动端直播应用,相信会被里面那令人惊叹的礼物动画效果迷住,比如像下面这样的效果. 从开发人员的角度来看,这样的效果虽然漂亮,实现但却是一大挑战,除了要考虑编码 ...

  5. 成品app直播源码中Android酷炫礼物动画实现方案(上篇)

    成品app直播源码中Android酷炫礼物动画实现方案(上篇) +在当下移动直播火爆的年代,如果你曾经使用过移动端直播应用,相信会被里面那令人惊叹的礼物动画效果迷住,比如像下面这样的效果. 从开发人员 ...

  6. [iOS]过渡动画之高级模仿 airbnb

    注意:我为过渡动画写了两篇文章: 第一篇:[iOS]过渡动画之简单模仿系统,主要分析系统简单的动画实现原理,以及讲解坐标系.绝对坐标系.相对坐标系,坐标系转换等知识,为第二篇储备理论基础.最后实现 M ...

  7. 关于iOS的社会化分享方案总结

    本文讲的是关于iOS的社会化分享方案总结,一.系统原生 UIActivityViewController 优缺点 优点:使用简单.不用注册繁杂的分享平台账号.不用导入臃肿的SDK包 缺点:UI可定制性 ...

  8. iOS中的HotFix方案总结详解

    iOS中的HotFix方案总结详解 相信HotFix大家应该都很熟悉了,今天主要对于最近调研的一些方案做一些总结.iOS中的HotFix方案大致可以分为四种: WaxPatch(Alibaba) Dy ...

  9. iOS 核心动画 Core Animation浅谈

    代码地址如下: http://www.demodashi.com/demo/11603.html 前记 关于实现一个iOS动画,如果简单的,我们可以直接调用UIView的代码块来实现,虽然使用UIVi ...

最新文章

  1. Docker之docker简介及其优势
  2. IT人经常围观精品站点推荐
  3. html/css学习笔记(一)
  4. 【译】Node.js 日志打印指南
  5. 基于JAVA+SpringBoot+Mybatis+MYSQL的进销存管理系统
  6. cache 计算机系统实验报告,西安交通大学计算机系统结构实验报告CACHE.doc
  7. 机器学习之使用Python完成逻辑回归
  8. iview admin 使用爬坑
  9. BAM MATLAB,最新DEA模型:RAM模型、BAM模型、加权SBM模型、SBM方向性距离模型计算...
  10. 每日单词20110507
  11. Python基础之面向对象基础
  12. (附源码)计算机毕业设计ssm大学生体检管理系统
  13. 电脑开启任务管理器的n种方法
  14. 这个 Go 开发的网络抓包工具,不仅好用还支持ES检索
  15. Adobe年底推出Creative Suite 3?
  16. 知识图谱构建软件Protege下载使用
  17. 华为怎么退出子用户_华为游戏中心怎么退出账号的具体步骤
  18. 阿里巴巴Java 开发手册 码出高效,码出质量 1.4.0
  19. 【web学习之mysql】 mysql- 学习 - 城市选择
  20. 关于傅里叶变换的理解、快速傅里叶算法的推导以及蝶形运算的c语言实现

热门文章

  1. ElasicSearch(3) 安装elasticsearch-head
  2. 初学python之路-day04
  3. Dcloud+mui 压缩上传图片到服务器
  4. 数据库临时表空间设置
  5. MySQL ERROR 1045 (28000): Access denied for user 'root'@'192.168.23.224' (using password: YES)
  6. TypeError: HashUpdate fail
  7. 有BRT,为啥还建公交港湾
  8. 【剑指offer】面试题21:调整数组顺序使奇数位于偶数前面(Java)
  9. java单终端登陆_配置终端服务单一登录
  10. 多商户商城源码_多商户小程序开发搭建?开达应用多商户入驻商城小程序制作教程...