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. 水一道NOIP2002提高组的题【A003】

    [A003]均分纸牌[难度A]———————————————————————————————————————————————————— [题目要求] 有 N 堆纸牌,编号分别为 1,2,…, N.每堆 ...

  2. 实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求

    系列文章 实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求  实战使用Axure设计App,使用WebStorm开发(2) – 创建 Ionic 项目   实战使 ...

  3. UITextView: 响应键盘的 return 事件(收回键盘)

    UITextView: 响应键盘的 return 事件(收回键盘) 此篇文章将要介绍UITextView: 响应键盘的 return 事件(收回键盘)的相关介绍,具体实例请看下文 UITextView ...

  4. 【BZOJ】1115: [POI2009]石子游戏Kam

    http://www.lydsy.com/JudgeOnline/problem.php?id=1115 题意:n堆石子,个数是从左到右单增.每一次可以从任意堆取出任意石子,但要保持单增这个性质.问先 ...

  5. C语言中if语句

    C语言if语句后面的表达式 C语言中if关键字之后(即括号内)均为表达式. 该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量,这些变量的值都换算成了逻辑 ...

  6. android音乐播放器(Service+ContentProvider+Broadcast+Activity四大组件完成)

    1.获取音乐 1-1:获取手机中的音乐(用ContentProvider内容提供者来完成): package com.firefly.util; import java.util.ArrayList; ...

  7. 2.2 节的练习--Compiler principles, technologys, &amp;tools

    2.2 节的练习 2.2.1 考虑下面的上下文无关文法: S -> S S + | S S * | a 试说明如何使用该文法生成串 aa+a* 试为这个串构造一颗语法分析树 ⧗ 该文法生成的语言 ...

  8. centos添加开机启动项目

    centOS 配置开机自启动两种方式: 1.vi /etc/rc.d/rc.local 在此文件中加入启动的脚本 2.chkconfig 增加自己的脚本  --add --list --del 步骤: ...

  9. FZU 2148 Moon Game --判凹包

    题意:给一些点,问这些点能够构成多少个凸四边形 做法: 1.直接判凸包 2.逆向思维,判凹包,不是凹包就是凸包了 怎样的四边形才是凹四边形呢?凹四边形总有一点在三个顶点的内部,假如顶点为A,B,C,D ...

  10. VIm vi 使用 汇总

    x 删除当前光标下的字符dw 删除光标之后的单词剩余部分.d$ 删除光标之后的该行剩余部分.dd 删除当前行. c 功能和d相同,区别在于完成删除操作后进入INSERT MODEcc 也是删除当前行, ...