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. ichecked 全选、反选

    //iChecked复选框的全选.反选var checkBox =function (checkParents){ $(checkParents).find('.minimalCheckBox1'). ...

  2. MATLAB学习(一)——状态好状态坏,自作自受

    状态不好,学学MATLAB做做准备吧. 一.基本情况 1.1 书写 一行写不下? %可以加上三个小黑点(续行符)并按下回车键,然后接下去再写.例如 s=-/+/-/+/-/+/-…- /+/-/+/- ...

  3. UnionPay,ChinaPay 最新 银联支付接口C#\Asp.net\MVC 版本

    1.概念普及 一.理解什么是UnionPay.ChinaPay 这两个概念如果搞不清楚,绝对够你瞎折腾一段时间的. UnionPay:中国银联,最大的机构:他本身也提供系统接口但都是B2B的,对于单个 ...

  4. Linux - 文本格式转换

    文本文档格式查看 Linux下的文档格式查看方法 cat -A <filename> | grep "^M$", 如果存在^M$字符就是Dos格式. Windows下的 ...

  5. MyBatis动态SQL使用,传入参数Map中的Key判断

    <select id="" parameterType="Map" resultMap="commodityResultMap" &g ...

  6. Fedora 11中用MinGW编译Windows的Qt4程序(在Linux系统下编译Windows的程序)

    Ubuntu下可以直接安装: sudo apt-get install mingw32 mingw32-binutils mingw32-runtime 安装后编译程序可以: i586-mingw32 ...

  7. C# Enum Type

    class Program { public enum TimeOfDay { Morining, Afternoon, Evening } static void Main(string[] arg ...

  8. 数据库之mysql

    安装mysql-server时连同客户端与perl环境一起安装了 centos6.5安装mysql[root@localhost ~]# yum install mysql-server Instal ...

  9. eclipse中输入@符号自动提示Annotation

    将Eclipse中Content Assist中的Auto activation for java里.的后面加上@符号即可

  10. HDU 4607 Park Visit 两次DFS求树直径

    两次DFS求树直径方法见 这里. 这里的直径是指最长链包含的节点个数,而上一题是指最长链的路径权值之和,注意区分. K <= R: ans = K − 1; K > R:   ans = ...