#import "ViewController.h"

@interface ViewController ()
@property(nonatomic,strong)UIButton *btn;
@property(nonatomic,strong)CALayer *calayer;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.btn=[UIButton buttonWithType:UIButtonTypeSystem];
    self.btn.frame=CGRectMake(100, 100, 100, 100);
    self.btn.backgroundColor=[UIColor redColor];
    [self.btn setTitle:@"按钮" forState:UIControlStateNormal];
    [self.btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:self.btn];
}
-(void)btnClick:(id)sender
{

    //基础动画两种实例化方式
//    CABasicAnimation *basicAnimation=[CABasicAnimation animationWithKeyPath:@"transform"];
    CABasicAnimation *basicAnimation=[CABasicAnimation animation];

    //基础动画主要有三个属性 fromValue, toValue, byValue
    //toValue到多少  byValue增加多少
    basicAnimation.keyPath=@"position";

    //这几个属性都是id类型,由于CGPoint是结构体类型,不能直接用,所以要转换一下下
//    basicAnimation.toValue=[NSValue valueWithCATransform3D:CATransform3DMakeTranslation(0, 100, 1)];
    //图层transform属性是CATransform3D类型 不能用仿射变换 仿射变换是图层中的方法所以不能通过CABasicAnimation动画改变
//    basicAnimation.toValue=[NSValue valueWithCGAffineTransform:CGAffineTransformMakeScale(2.0, 2.0)];

    //位置变换
    basicAnimation.fromValue=[NSValue valueWithCGPoint:CGPointMake(0, 0)];
    basicAnimation.toValue=[NSValue valueWithCGPoint:CGPointMake(300, 300)];

    //动画是添加到图层上的,动画结束后是否移除该动画 如果YES,fillMode属性基本没意义
    basicAnimation.removedOnCompletion=NO;
    //设置动画的状态
    //kCAFillModeForwards:动画延迟结束开始执行动画时从fromValue到toValue最终停留在toValue
    //kCAFillModeBackwards:动画在fromValue后开始延迟,延迟结束执行动画,从fromValue到toValue,最终到初始值状态
    //kCAFillModeBoth:动画在fromValue后开始延迟,延迟结束执行动画,从fromValue到toValue,最终到toValue
    //kCAFillModeRemoved:动画延迟结束开始执行动画时从fromValue到toValue最终停留在初始值状态
    basicAnimation.fillMode=kCAFillModeRemoved;
    //动画共有的一些属性
    basicAnimation.duration=5.0;
    // 延迟5秒执行
    basicAnimation.beginTime=CACurrentMediaTime()+5;
    //设置动画的代理
     basicAnimation.delegate=self;
    //在图层中增加动画
    [self.btn.layer addAnimation:basicAnimation forKey:nil];

}
//CAAnimation动画代理方法 这两个代理方法是在CAAnimation中的代理,所以其他的动画也可以使用
- (void)animationDidStart:(CAAnimation *)anim
{
    NSLog(@"动画开始");
}
//CAAnimation动画代理方法结束动画
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
{
    NSLog(@"动画结束");
    NSLog(@"%f",self.btn.frame.origin.x);
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

@end

Core Animation之CABasicAnimation(基础动画)的更多相关文章

  1. Core Animation中的基础动画

    基础动画 在开发过程中很多情况下通过基础动画就可以满足开发需求,前面例子中使用的UIView代码块进行图像放大缩小的演示动画也是基础动画(在iOS7 中UIView也对关键帧动画进行了封装),只是UI ...

  2. Core Animation之CABasicAnimation

    在iOS中,图形可分为以下几个层次: 越上层,封装程度越高,动画实现越简洁越简单,但是自由度越低:反之亦然.本文着重介绍Core Animation层的基本动画实现方案. 在iOS中,展示动画可以类比 ...

  3. 使用Core Animation对象来实现动画

    转载保留原文地址:http://blog.csdn.net/kqjob/article/details/10417461,转载的 在iOS中如果使用普通的动画则可以使用UIKit提供的动画方式来实现, ...

  4. iOS Core Animation学习总结(3)--动画的基本类型

    一. CABasicAnimation (基础动画) 移位: CABasicAnimation *animation = [CABasicAnimation animation]; //keyPath ...

  5. Core Animation中的组动画

    实际开发中一个物体的运动往往是复合运动,单一属性的运动情况比较少,但恰恰属性动画每次进行动画设置时一次只能设置一个属性进行动画控制(不管是 基础动画还是关键帧动画都是如此),这样一来要做一个复合运动的 ...

  6. core Animation之CAKeyframeAnimation(关键帧动画)

    CABasicAnimation的区别是:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSA ...

  7. 在ios中运用core animation暂停和继续动画

    本文转载至 http://blog.csdn.net/wildfireli/article/details/23191861 暂停和继续动画的核心代码如下: <pre name="co ...

  8. Core Animation中的关键帧动画

    键帧动画就是在动画控制过程中开发者指定主要的动画状态,至于各个状态间动画如何进行则由系统自动运算补充(每两个关键帧之间系统形成的动画称为“补间动画”),这种动画的好处就是开发者不用逐个控制每个动画帧, ...

  9. Core Animation一些Demo总结 (动态切换图片、大转盘、图片折叠、进度条等动画效果)

    前一篇总结了Core Animation的一些基础知识,这一篇主要是Core Animation 的一些应用,涉及到CAShapeLayer.CAReplicatorLayer等图层的知识. 先看效果 ...

随机推荐

  1. ReLU 和sigmoid 函数对比

    详细对比请查看:http://www.zhihu.com/question/29021768/answer/43517930 . 激活函数的作用: 是为了增加神经网络模型的非线性.否则你想想,没有激活 ...

  2. Aggregate类型以及值初始化

    引言 在C++中,POD是一个极其重要的概念.要理解POD类型,我们首先需要理解Aggregate类型.下文结合stackoverflow上的高票回答将对Aggregate类型做一个全面的解读. 对于 ...

  3. 【洛谷4587】 [FJOI2016]神秘数(主席树)

    传送门 BZOJ 然而是权限题 洛谷 Solution 发现题目给出的一些规律,emm,如果我们新凑出来的一个数,那么后面一个数一定是\(sum+1\). 于是就可以主席树随便维护了! 代码实现 #i ...

  4. 初识node.js(通过npm下载项目依赖的包的过程)

    一.初识node.js 简单的说Node.js 就是运行在服务器端的JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Node.js是一个事 ...

  5. Swift 里 Array (四) Accessing Elements

    根据下标取值 关键代码如下: func _getElement( _ index: Int, wasNativeTypeChecked: Bool, matchingSubscriptCheck: _ ...

  6. centos 部署.netcore 开发环境

    .netcore 2.0的安装,安装前,先参考官方文档 https://www.microsoft.com/net/core#linuxcentos 先做微软的签名校验工作 # sudo rpm -- ...

  7. Selenium3 + Python3自动化测试系列三——控制浏览器操作

    控制浏览器操作 控制浏览器窗口大小 在测试过程中,我们在打开浏览器后,根据需求可自定义调整浏览器的尺寸大小.WebDriver提供了set_window_size()方法来设置浏览器的大小. 如果页面 ...

  8. WebDriver高级应用实例(6)

    6.1精确比较网页截图图片 目的:对于核心界面进行截屏,并且使用测试过程中的截图和以前测试过程中的截图进行比较.确认页面是否发生了改变 被测网页的网址: http://www.baidu.com Ja ...

  9. POJ 2782

    #include <iostream> #include <algorithm> #define MAXN 100005 using namespace std; int _m ...

  10. POJ 2405

    #include <iostream> #include <cmath> #include <iomanip> #define pi 3.1415926536 us ...