动画

作者: 闲得一B | 来源:发表于2016-05-04 18:11 被阅读63次

    CABasicAnimation基础核心动画
    核心动画之作用在层上面.
    动画的本质是改图层的某一个属性.
    CABasicAnimation *anim = [CABasicAnimation animation];
    图层有那些属性,这里才能写那些属性.
    anim.keyPath = @"transform.scale";
    anim.toValue = @0.5;
    告诉动画完成的时候不要移除
    anim.removedOnCompletion = NO;
    保存动画最前面的效果.
    anim.fillMode = kCAFillModeForwards;
    把动画添加到层上面.
    [_redView.layer addAnimation:anim forKey:nil];
    

    缩放动画
        CABasicAnimation *anim =[CABasicAnimation  animation];
    //    设置缩放属性
        anim.keyPath = @"transform.scale";
    //    缩放到最小
        anim.toValue = @0;
    //    设置动画执行的次数
        anim.repeatCount = MAXFLOAT;
    //    设置动画执行的时长
        anim.duration = 0.25;
    //    设置动画自动反转(怎么去, 怎么回)
        anim.autoreverses = YES;
    //    添加动画
        [self.myView.layer addAnimation:anim forKey:nil];
    

    图片抖动
    其实就是做一个左右旋转的动画.先让它往左边旋转-5,再往右边旋转5度,再从5度旋转到-5度.
    就会有左右摇摆的效果了.    
    具体实现代码
    创建帧动画
    CAKeyframeAnimation *anim = [CAKeyframeAnimation animation];
    设置动画属性为旋转
    anim.keyPath = @"transform.rotation";
    设置属性值为多个属性
    anim.values = @[@(angle2radio(-5)),@(angle2radio(5)),@(angle2radio(-5))];
    设置动画执行次数
    anim.repeatCount = MAXFLOAT;
    添加动画
    [_imageView.layer addAnimation:anim forKey:nil];
    

    根据圆形的路径做移动的效果.
    创建路径
    UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(50, 50, 100, 100)];
    [path addLineToPoint:CGPointMake(200, 500)];
    把路径设为动画的属性
    anim.path = path.CGPath;
    

    转场动画
    就是从一个场景转换到另一个场景,像导航控制器的push效果,就是一个转场.
    

    创建转场动画:

    创建转场动画
    CATransition *anim = [CATransition animation];
    设置转场类型
    anim.type = @"cube";
    anim.duration = 1;
    设置转场的方向
    anim.subtype = kCATransitionFromLeft;
    设置动画的开始位置
    anim.startProgress = 0.5;
    设置动画的结束位置
    anim.endProgress  =0.8;
    添加动画.了
     [_imageV.layer addAnimation:anim forKey:nil];
    要执行动画的代码称为转场代码.
    转场动画要和转场代码写在同一个方法当中才有动画效果.
    

    UIView转场动画
     [UIView transitionWithView:self.imageV duration:1 
    options:UIViewAnimationOptionTransitionFlipFromRight 
            animations:^{
                转场代码
            } completion:^(BOOL finished) {
                动画执行完毕时调用.
    }];
    使用UIView转场的类型比较少.
    

    动画组
    使用动画组的好处,不需要每次都去添加动画,设置动画完成时的属性.
    只需要把要执行的动画,添加到动画组的animations数组当中即可,
    最后把组动画添加到层上面,就会自动执行数组当中的动画.
    动画完成时设置的属性也只需要设置一次.
    
    创建组动画
    CAAnimationGroup *group = [CAAnimationGroup animation];
        
    平移
    CABasicAnimation *anim = [CABasicAnimation animation];
    anim.keyPath = @"position.y";
    anim.toValue = @400;
        
    缩放
    CABasicAnimation *scaleAnim = [CABasicAnimation  animation];
    scaleAnim.keyPath = @"transform.scale";
    scaleAnim.toValue = @0.5;
    设置动画组属性
    group.animations = @[anim,scaleAnim];
    group.removedOnCompletion = NO;
    group.fillMode = kCAFillModeForwards;
    添加组动画
    [self.redView.layer addAnimation:group forKey:nil];
    
    1.UIView和核心动画区别?

    核心动画只能添加到CALayer
    核心动画一切都是假象,并不会改变真实的值。

    2.什么时候使用UIView的动画?

    如果需要与用户交互就使用UIView的动画.
    不需要与用户交互可以使用核心动画

    3.什么场景使用核心动画最多?

    在转场动画中,核心动画的类型比较多
    根据一个路径做动画,只能用核心动画(帧动画)
    动画组:同时做多个动画

    相关文章

      网友评论

          本文标题:动画

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