CAMediaTiming是一个协议(protocol),CAAnimation是所有动画类的父类,但是它不能直接使用,应该使用它的子类。

继承关系:

CoreAnmiation 核心动画 简写CA                                                                                                         CoreAnimation 中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍。也就是说,使用少量的代码就可以实现非常强大的功能

我们之前使用过的UIView动画,其实本质上也是CoreAnimation实现的,只是对他里面的动画进行了封装

视图(UIView)支持动画的属性有 frame  bounds center alpha transform 以及动画延迟  动画曲线( 淡入淡出 动画过渡) 重复次数

方法:

**********************************************************************

+ (void)setAnimationDelegate:(id)delegate;代理

+ (void)setAnimationWillStartSelector:(SEL)selector   当动画即将开始时,执行delegate对象的selector,并且把beginAnimations:context:中传入的参数传进selector

+ (void)setAnimationDidStopSelector:(SEL)selector  当动画结束时,执行delegate对象的selector,并且把beginAnimations:context:中传入的参数传进selector

+ (void)setAnimationDuration:(NSTimeInterval)duration   动画的持续时间,秒为单位

+ (void)setAnimationDelay:(NSTimeInterval)delay  动画延迟delay秒后再开始

+ (void)setAnimationStartDate:(NSDate *)startDate   动画的开始时间,默认为now

+ (void)setAnimationCurve:(UIViewAnimationCurve)curve  动画的节奏控制

+ (void)setAnimationRepeatCount:(float)repeatCount  动画的重复次数

+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses  如果设置为YES,代表动画每次重复执行的效果会跟上一次相反

+ (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache  设置视图view的过渡效果, transition指定过渡类型, cache设置YES代表使用视图缓存,性能较好 */

**********************************************************************

但CAAnimation是所有动画类的父类,但是它不能直接使用,应该使用它的子类。CABasicAnimation、CAKeyframeAnimation、CATransition、CAAnimationGroup(CAPropertyAnimation也不能直接使用,需要使用它的两个子类)

说明以上所有的方法和它的属性,子类都可以使用。

使用案例:

 -(void)viewanimation1{

    /**
      *  动画方向
      *
      UIViewAnimationTransitionNone,
      UIViewAnimationTransitionFlipFromLeft,从左翻转
      UIViewAnimationTransitionFlipFromRight,从右面翻转
      UIViewAnimationTransitionCurlUp,向上翻页
      UIViewAnimationTransitionCurlDown,向下翻页
      */

  /**
      *  过渡状态
      *
      UIViewAnimationCurveEaseInOut,慢进慢出      // slow at beginning and end
      UIViewAnimationCurveEaseIn,慢进            // slow at beginning
      UIViewAnimationCurveEaseOut,  慢出         // slow at end
      UIViewAnimationCurveLinear 匀速
      */
 //*********************************************************************
 //   注意: 执行一个动画 必须有一个开始动画 和提交动画 才能运行一个动画

 //    UIView的过渡动画·······
 //        开始动画
     [UIView beginAnimations:@"jk" context:nil];

 //    设置动画的方向
     [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:imageView cache:YES];

 //    设置动画持续时间
     [UIView setAnimationDuration:];

 //    设置动画效果过渡的状态
     [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];

 //    提交动画
     [UIView commitAnimations];

 //    检测 动画结束
     [UIView setAnimationDelegate:self];

 //    动画快要结束时,调用另一个方法
     [UIView setAnimationDidStopSelector:@selector(finishanimation)];
 }

CAPropertyAnimation属性动画                                                                                                 、

CALayer和UIView的关系

  • 在UIView中有一个layer属性作为图层,根图层没有隐式动画 根图层上可以放其他子图层,在UIView中所有能够看到的内容都包含在layer中
  • Core Animation是直接作用在CALayer上的,并非UIView。
  • CAlayer负责视图中显示的内容和动画
  • UIView负责监听和响应事件
  • 由于CALayer在设计之初就考虑它的动画操作功能,CALayer很多属性在修改时都能形成动画效果,这种属性称为“隐式动画属性”。

CALayer在修改他的属性时都能形成动画效果  这种动画效果  叫做隐式动画。

/**

*    属性                 说明                是否支持隐式动画

anchorPoint       锚点、定位点  锚点的描述是相对于 *自己* x、y位置比例而言的 默认在图像中心点(0.5,0.5)的位置  决定图层的哪一个点 显示在中心点的位置         是

backgroundColor    图层背景颜色              是

borderColor     边框颜色         是

borderWidth         边框宽度     是

bounds         图层大小           是

contents         图层显示内容,例如可以将图片作为图层内容显示   是

contentsRect       图层显示内容的大小和位置           是

cornerRadius        圆角半径                  是

doubleSided        图层背面是否显示,默认为YES              否

frame           图层大小和位置,不支持隐式动画,所以CALayer中很少使用frame,通常使用bounds和position代替                     否

hidden     是否隐藏                     是

mask     图层蒙版                   是

maskToBounds          子图层是否剪切图层边界,默认为NO             是

opacity            透明度 ,类似于UIView的alpha             是

position         决定图层在父视图的位置 图层位于 *父视图* 中心点位置,类似于UIView的center   是

shadowColor         阴影颜色                   是

shadowOffset       阴影偏移量               是

shadowOpacity     阴影透明度,注意默认为0,如果设置阴影必须设置此属性 是

shadowPath          阴影的形状                           是

shadowRadius       阴影模糊半径               是

sublayers             子图层  是

sublayerTransform         子图层形变         是

transform  图层形变                  是

*  @  以上支持隐式动画的属性 本质是这些属性的变动默认隐含了CABasicAnimation动画实现

1.CABasicAnimation的使用:

 #pragma mark-------------------改变position--------------------
 -(void)animation1{

 //  ***************初始化*****************
 //    注意:CABasicAnimation 使用属性动画 需告诉它 我们要改变的属性 是哪个(把属性当做字符串传递)这里很重要,字符串不         能有错
     CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];

 //  ***************初始化*****************
 //    NSValue 有可以把结构体转为id类型
 //    设置动画要到那一个位置
     animation.toValue = [NSValue valueWithCGPoint:CGPointMake(, showlayer.position.y)];
     animation.duration = ;

 //    以动画效果出发 以动画效果出发回到初始位置
     animation.autoreverses = YES;
 //
 //    如果要使用 fillMode 必须要把removedOnCompletion禁用
     animation.removedOnCompletion = NO;

 //    以动画效果出发 不会以动画效果出发回到初始位置
     animation.fillMode = kCAFillModeRemoved;
 //****************************
 //    kCAFillModeForwards  不会回来了
 //    kCAFillModeBackwards 会返回来
 //    kCAFillModeBoth  不会回来了
 //    kCAFillModeRemoved  会返回来
 //****************************

 //    设置 慢进慢出
     animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
 //   添加一个动画到图层
     [showlayer addAnimation:animation forKey:@"move ke bu xie"];

 }

 #pragma mark-------------------改变transform的z的旋转--------------------
 -(void)animation3{

 //    基础动画师继承于属性动画的 通过属性名当作一个key来确定围绕那个属性 进行动画
     CABasicAnimation *antimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
     antimation.fromValue = @(-0.1);//从这位置出发
     antimation.toValue = @(0.1);//到这位置结束
     antimation.duration = 0.05;//持续时间
     antimation.repeatCount = ;//重复次数
 //    是否以动画的效果方式返回
     antimation.autoreverses = YES;
 //    给图层添加动画
     [showlayer addAnimation:antimation forKey:@"shake"];
   }

2.CAKeyframeAnimation(关键帧动画)的使用:

  • 关键帧动画 可以让我们精准的控制动画效果 它的原理是把动画序列里面比较关键的帧提取出来,设置它的动画效果
  • 关键帧:  1. path属性 执行动画轨迹的路径  2.value属性 执行动画轨迹的路径
 #import "ViewController.h"

 @interface ViewController ()
 {
     CALayer *petalayer;
 }
 @end

 @implementation ViewController

 - (void)viewDidLoad {
     [super viewDidLoad];
 //    背景图
     UIImageView *iamgeView = [[UIImageView alloc]initWithFrame:[UIScreen mainScreen].bounds];
     iamgeView.image = [UIImage imageNamed:"];
     [self.view addSubview:iamgeView];
     [self addflower];
 }

 -(void)addflower
 {
     UIImage *petal = [UIImage imageNamed:"];
     petalayer = [[CALayer alloc]init];
     petalayer.bounds = CGRectMake(, ,petal.size.width , petal.size.height);
     petalayer.position = CGPointMake(, );
     petalayer.contents = (id)petal.CGImage;
     [self.view.layer addSublayer:petalayer];

 }

 -(void)dropAanimation{
 //初始化
     CAKeyframeAnimation *drop = [CAKeyframeAnimation animationWithKeyPath:@"position"];
     drop.duration = ;

 // 1.******************************************************************
 //    放入改变position的几个点
     drop.values = @[[NSValue valueWithCGPoint:CGPointMake(, )],[self getPointWithX: andY:],[self getPointWithX:- andY:],[self getPointWithX: andY:]];
 //*********************************************************************

 //2.*****************也可以采用路径的方式也可以达到效果**********************
 //    创建路径
     CGMutablePathRef path = CGPathCreateMutable();
 //    给路径添加一个起始点
     CGPathMoveToPoint(path, NULL, petalayer.position.x, petalayer.position.y);
 //    有起始点 可以通过起始点 到另外一个点 画一条线
     CGPathAddLineToPoint(path, NULL, petalayer.position.x + , petalayer.position.y + );
      CGPathAddLineToPoint(path, NULL, petalayer.position.x - , petalayer.position.y - );
     // 关闭路径
     CGPathCloseSubpath(path);
      drop.path = path;

     // 释放路径
     path = nil;
 // ********************************************************************

     drop.removedOnCompletion = NO;
     drop.fillMode = kCAFillModeBoth;//不返回
     [petalayer addAnimation:drop forKey:@"djg"];

 }

 - (NSValue *)getPointWithX:(CGFloat)x andY:(CGFloat)y{

     return [NSValue valueWithCGPoint:CGPointMake(x+petalayer.position.x , y+petalayer.position.y)];
 }

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
     [self dropAanimation];
 }

 @end

IOS开发-属性动画和关键帧动画的使用的更多相关文章

  1. 核心动画基础动画(CABasicAnimation)关键帧动画

    1.在iOS中核心动画分为几类: 基础动画(CABasicAnimation) 关键帧动画(CAKeyframeAnimation) 动画组(CAAnimationGroup) 转场动画(CATran ...

  2. iOS开发笔记10:圆点缩放动画、强制更新、远程推送加语音提醒及UIView截屏

    1.使用CAReplicatorLayer制作等待动画 CALayer+CABasicAnimation可以制作很多简单的动画效果,之前的博客中介绍的“两个动画”,一个是利用一张渐变色图片+CABas ...

  3. iOS:核心动画之关键帧动画CAKeyframeAnimation

    CAKeyframeAnimation——关键帧动画 关键帧动画,也是CAPropertyAnimation的子类,与CABasicAnimation的区别是: –CABasicAnimation只能 ...

  4. WPF动画之关键帧动画(2)

    XAML代码: <Window x:Class="关键帧动画.MainWindow" xmlns="http://schemas.microsoft.com/win ...

  5. iOS开发--QQ音乐练习,旋转动画的实现,音乐工具类的封装,定时器的使用技巧,SliderBar的事件处理

    一.旋转动画的实现 二.音乐工具类的封装 -- 返回所有歌曲,返回当前播放歌曲,设置当前播放歌曲,返回下一首歌曲,返回上一首歌曲方法的实现 头文件 .m文件 #import "ChaosMu ...

  6. ios开发之简单实现loading动画效果

    最近有朋友问我类似微信语音播放的喇叭动画和界面图片加载loading界面是怎样实现的,是不是就是一个gif图片呢!我的回答当然是否定了,当然不排除也有人用gif图片啊!下面我就来罗列三种实现loadi ...

  7. ios开发——实用技术篇&amp;三维旋转动画

    实现三位旋转动画的方法有很多种,这里介绍三种 一:UIView 1 [UIView animateWithDuration:1.0 animations:^{ 2 self.iconView.laye ...

  8. iOS开发UI篇—核心动画(关键帧动画)

    转自:http://www.cnblogs.com/wendingding/p/3801330.html iOS开发UI篇—核心动画(关键帧动画) 一.简单介绍 是CApropertyAnimatio ...

  9. iOS开发——UI进阶篇(十七)CALayer,核心动画基本使用

    一.CALayer简介 1.CALayer在iOS中,文本输入框.一个图标等等,这些都是UIView你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个其实UIView之所以 ...

随机推荐

  1. nodejs处理url工具

    url模块提供3个方法:parse,format,resolve 1.parse 要先引入url模块 >url.parse('http://www.cnblogs.com/cate/108703 ...

  2. Ubuntu(Linux系统)虚拟机工具vmtools详细说明

    安装虚拟机工具vmtools大概步骤如下: 个人总结步骤: 第一步:点击虚拟机软件的vm工具栏选项,选择install vmware tools(安装VMware Tools) 第二步:桌面会出现一个 ...

  3. ASP.NET MVC动作过滤器

    ASP.NET MVC提供了4种不同的动作过滤器(Aciton Filter). 1.Authorization Filter 在执行任何Filter或Action之前被执行,用于身份验证 2.Act ...

  4. mysql delete 使用别名 语法

    今天删除数据,写了这么条sql语句, DELETE   from  sys_menus s WHERE s.MENU_ID in (86,87,88); 结果报错.. [Err] 1064 - You ...

  5. web发布 将各个文件夹输出合并到其自己的程序集 注意事项

    今天在发布web网站的时候 使用了“将各个文件夹输出合并到其自己的程序集”的选项,如图: 开始在 程序集前缀(可选)处,没有填写内容. 发布到IIS后出现未加载到程序集xxxx的错误. 经过各种调试, ...

  6. Java反射的一些理解

    1.Class对象 VS. 实例对象 在Java中我们一般是这样使用类的:编写类,然后new对象,再调用方法.这里new出来的对象暂且称之为实例对象(instance).其实在这之前还涉及到一个Cla ...

  7. java的事务处理

    本文转自http://zhenchengchagangzi.iteye.com/blog/1159493 java的事务处理,如果对数据库进行多次操作,每一次的执行或步骤都是一个事务.如果数据库操作在 ...

  8. Nginx_查看并发连接数

    通过查看Nginx的并发连接,我们可以更清除的知道网站的负载情况.Nginx并发查看有两种方法(之所以这么说,是因为笔者只知道两种),一种是通过 web界面,一种是通过命令,web查看要比命令查看显示 ...

  9. ArcGIS API for Flex实现GraphicsLayer上画点、线、面。

    目的: ArcGIS API for Flex实现GraphicsLayer上画点.线.面. 准备工作: 1.这次地图数据就用Esri提供的http://server.arcgisonline.com ...

  10. Power-BI费用分析

    费用分析主要从财务三大费用入手,剖析费用的结构.用途.占用等情况,从三大费用到明细费用.部门.职员的层层钻取,从而有效地进行费用管理和控制.Power-BI前端展示:图1<ignore_js_o ...