iOS 09、iOS核心动画之-CABasicAnimation

1、iOS核心动画:Core Animation,是一组强大的苹果API,作用的苹果产品上,乔老大之前在开发者大会展示,使用简单,效果多彩炫丽,而且后台运行,不堵塞主线程你说是有多方便!!!

2、核心动画API中的类:核心动画有个最老最上层的类就是CAAnimation,负责动画的持续时间和速度等,但是这个类不能直接使用,只是一个抽象类,必须要使用他的子类(因为抽象类不能被实例化)

3、核心动画如何使用:在iOS的开发过程中,做视图动画其实就是操作视图layer,添加动画,然后进行实现各种不同风格动画的实现,而非是视图view本身。视图本身的layer是视图的根layer,是不具有隐式动画的,非根layer的动画会默认具有隐式动画。

4、CABasicAnimation:CABasicAnimation是核心动画类簇中的一个类,其父类是CAPropertyAnimation,当然最终继承的类都是CAAnimation。查看其实例类中的方法可知:CABasicAnimation可用于做一些视图简单的变化,例如:平移、缩放、旋转等。说白了:这就是对一个视图,通过操作layer,进行一个基本的动画操作。什么叫做基本动画操作?就是上面说的移动啊,旋转啊,甚至修改些颜色渐变啊什么的,就是你能想到的操作一个视图的基本操作,你都通过CABasicAnimation来实现就对了,而CABasicAnimation比较重要是属性就是fromValue、toValue和byValue

划重点:layer的锚点anchorPoint是动画理论知识必须要掌握的
所以我们应该先理解position和anchorPoint这两者,更加熟悉了解锚点anchorPoint
观察CALayer的属性可知:锚点anchorPoint的默认的(0.5,0.5)


CALayer.h

所以说,在默认情况下锚点anchorPoint是(0.5,0.5),对于一个正方形来说,中间红色的点就是锚点anchorPoint的位置,而我们layer层的position这个点取决于锚点anchorPoint的位置,所以默认情况下就是视图的中间点,这时就与视图center的位置也刚好重合。


锚点anchorPoint的位置

我们用代码证明一下:

NSLog(@"self.redView center is %@",NSStringFromCGPoint(self.redView.center));
NSLog(@"self.redView.layer position is %@",NSStringFromCGPoint(self.redView.layer.position));

我设置的redView的位置是{{100,100},{200,200}}

2018-07-18 18:55:24.819 demoForHash[1614:227332] self.redView center is {200, 200}
2018-07-18 18:55:24.820 demoForHash[1614:227332] self.redView.layer position is {200, 200}

5、动画的开发步骤:
(1) 针对的是layer层,所以必须是CALayer对象
(2)通过类方法实例化一个CABasicAnimation对象,并设置相关属性
(3)给layer增加动画addAnimation:(CAAnimation *)anim forKey:(nullable NSString *)key

示例代码:

CABasicAnimation *animation = [CABasicAnimation animation];
//    设置移动
//    animation.keyPath = @"position";
//    animation.toValue = [NSValue valueWithCGPoint:CGPointMake(300, 300)]; ;
//    animation.removedOnCompletion = NO;
//    animation.repeatCount = MAXFLOAT;

//    设置放大 缩小
//    animation.duration = 1.f;
//    animation.keyPath = @"transform.scale";
//    animation.fromValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.5, 0.5, 0.5)];
//    animation.removedOnCompletion= NO;
//    animation.fillMode = kCAFillModeForwards;
//    animation.repeatCount = MAXFLOAT;
    
//    设置透明度
    //    动画的执行事件
    animation.duration = 2.f;
//    动画的keypath属性
    animation.keyPath = @"opacity";
//    动画的开始值
    animation.fromValue = [NSNumber numberWithDouble:0.f];
//    动画的结束值
    animation.toValue = [NSNumber numberWithDouble:1.f];
//    动画默认的是执行完就移除当前动画效果的,可以设置不移除
    animation.removedOnCompletion= NO;
//    主要是表示动画非执行情况下的行为,开始前和结束后,设置的属性有四个,kCAFillModeForwards为保持结束后的行为不变
    animation.fillMode = kCAFillModeForwards;
//    动画的执行次数
    animation.repeatCount = MAXFLOAT;
    
//  addAnimation:(CAAnimation *)anim forKey:(nullable NSString *)key
//  这个方法的第一参数传的实例的动画对象,第二个是这个动画的身份标识,可以传nil
//    [_redView.layer addAnimation:animation forKey:@"ani-Position"];
//    [_redView.layer addAnimation:animation forKey:@"ani-Scale"];
//    [_redView.layer addAnimation:animation forKey:@"ani-Opacity"];
    [_redView.layer addAnimation:animation forKey:nil];

你可能感兴趣的:(iOS 09、iOS核心动画之-CABasicAnimation)