#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(基础动画)-LMLPHP

05-07 15:22