美文网首页
iOS 09、iOS核心动画之-CABasicAnimation

iOS 09、iOS核心动画之-CABasicAnimation

作者: echo海猫 | 来源:发表于2018-07-19 13:11 被阅读126次

    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

    划重点: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

          本文链接:https://www.haomeiwen.com/subject/egrapftx.html