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. the Zen of Python---转载版

    摘自译文学习区 http://article.yeeyan.org/view/legendsland/154430 The Zen of Python Python 之禅 Beautiful is b ...

  2. 解决WINDOWS防火墙开启后Ping不通

    WINDOWS系统由于安全考虑,当开启防火墙时,默认不允许外主机对其进行ping功能,即别的电脑ping不通本机.别的主机ping不通本机是因为本机的防火墙关闭了ICMP回显功能,只要把这回显功能打开 ...

  3. JVM-String比较-字节码分析

    一道String字符串比较问题引发的字节码分析 public class a { public static void main(String[] args)throws Exception{ } p ...

  4. 查找数组中重复项的index

    var ary = [5, 4, 4, 2, 7, 8, 33, 2222, 99, 88]; function isRepeat(arr) { var hash = {}; for (var i=0 ...

  5. 关于RPC与MQ异同的理解

    最近看了一些资料,回顾过去项目的经验,梳理自己对两者异同的理解: 相同: 1.都利于大型系统的解耦: 2.都提供子系统之间的交互,特别是异构子系统(如java\node等不同开发语言): 不同: 1. ...

  6. 作业七:团队项目——Alpha版本冲刺阶段-04

    昨天进展:象棋图片以及窗体完成 今天安排:代码编写.

  7. 二叉查找树(三)之 Java的实现

    概要 在前面分别介绍了"二叉查找树的相关理论知识,然后给出了二叉查找树的C和C++实现版本".这一章写一写二叉查找树的Java实现版本. 目录 1. 二叉树查找树2. 二叉查找树的 ...

  8. jQuery学习笔记:整理一些常用的jQuery操作DOM事件

    1.attr() .removeAttr() .attr() 方法可以传入一个名值对的参数,也可以传入一个包含2个以上名值对的对象参数,例如: .attr('src','images/a.jpg'); ...

  9. linux下用mii-tool和ethtool 查看网线是否正确连接到网卡

    输入mii-tool可以查看网线是否连接到网卡#mii-tool eth0: negotiated 100baseTx-FD, link ok 有时驱动可能不支持会出错下列错误#mii-tool SI ...

  10. Maximum Value(哈希)

    B. Maximum Value time limit per test 1 second memory limit per test 256 megabytes input standard inp ...