动画效果-02 CABasicAnimation的用法


1.实现的效果:


动画效果-02 CABasicAnimation的用法_第1张图片

没有设置fillMode=kCAFillModeForwards和removedOnCompletion=NO时,动画效果结束之后图层恢复到原来的状态


动画效果-02 CABasicAnimation的用法_第2张图片

2.CABasicAnimation是什么?

CABasicAnimation中文翻译为基础动画,它继承自CAPropertyAnimation,CAPropertyAnimation继承自CAAnimation。

3.CAPropertyAnimation的简单介绍

CAPropertyAnimation中文翻译为属性动画,它是CAAnimation的子类,它自己也是一个抽象类,应该使用它的子类进行创建动画。它的两个子类分别是:CABasicAnimation和CAKeyFrameAnimation。

4.常用的属性

<1>keyPath:它是CAPropertyAnimation的属性。通过把CALayer对象的属性赋值给keyPath,然后通过其他属性对参数进行修改,从而达到动画的效果。比如:CALayer对象有一个position属性,设置keyPath = @"position";然后修改通过修改其他属性,从而达到平移的动画效果。

<2>fromValue:keyPath设置的属性的初始值

<3>toValue:keyPath设置的属性的结束值

5.注意事项:

随着动画的进行,在长度为duration的持续时间内,keyPath对应属性的值从fromValue渐渐的变为toValue的值。

如果fillMode=kCAFillModeForwards和removedOnCompletion=NO;那么动画效果执行完毕后,图层会保持动画执行之后的状态。但是,实质上,图层的属性值还是动画之前的初始值,并没有真正的被改变。比如CALayer对象的position初始值为(0,0),CABasicAnimation对象设置的fromValue = (10,10),toValue = (200,200),虽然动画结束之后,图层保持在了(200,200)的位置,但是实质上图层的position依然是(0,0)。

6.参考代码:

@interface ViewController ()

@end

@implementation ViewController {

    CALayer* _redLayer;

}

- (void)viewDidLoad {

    [super viewDidLoad];

      _redLayer = [[CALayer alloc] init];

    _redLayer.backgroundColor = [UIColor redColor].CGColor;  

  _redLayer.position = CGPointMake(200, 200);

    _redLayer.bounds = CGRectMake(0, 0, 50, 50);  

  [self.view.layer addSublayer:_redLayer]; 

   }

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event{

//1.创建动画对象

CABasicAnimation* basicAnimation = [[CABasicAnimation alloc] init];

//2.设置动画属性

//2.1设置动画属

basicAnimation.keyPath = @"transform.scale";

//2.2设置动画结束值

basicAnimation.byValue = @(M_PI/4);

//2.3设置动画结束后保持在原来的位置

basicAnimation.removedOnCompletion = NO;

basicAnimation.fillMode = kCAFillModeForwards;

//2.4设置动画时间

basicAnimation.duration = .5;

//3.添加动画对象到对应的layer上面

[_redLayer addAnimation:basicAnimation forKey:nil];

}

你可能感兴趣的:(动画效果-02 CABasicAnimation的用法)