美文网首页
iOS-CoreAnimation 核心动画

iOS-CoreAnimation 核心动画

作者: Fat_L | 来源:发表于2018-01-02 15:12 被阅读12次

    前提

    说coreAnimation动画前,先说下UIView动画

    UIView动画实质上是对Core Animation的封装,提供简洁的动画接口。

    UIView动画可以设置的动画属性有:

    1、大小变化(frame)

    2、拉伸变化(bounds)

    3、中心位置(center)

    4、旋转(transform)

    5、透明度(alpha)

    6、背景颜色(backgroundColor)

    7、拉伸内容(contentStretch)

    实行方式

    1.block动画

    2.Spring动画

    3.Keyframes动画

    4.转场动画

    4.1 单个视图的过渡效果

    [UIView transitionWithView:self.centerShow         

                 duration:1.0

                 options:UIViewAnimationOptionTransitionCrossDissolve

                 animations:^{self.centerShow.image = [UIImageimageNamed:@"Service"];  

    } completion:^(BOOLfinished) {

                  NSLog(@"动画结束");  
    }];

    UIImageView* newCenterShow = [[UIImageView alloc]initWithFrame:self.centerShow.frame];    newCenterShow.image = [UIImage imageNamed:@"Service"];   

    [UIView transitionFromView:self.centerShow

                  toView:newCenterShow

                  duration:1.0

                  options:UIViewAnimationOptionTransitionFlipFromLeft

                  completion:^(BOOLfinished) {

                  NSLog(@"动画结束");   

    }];

    4.2 从旧视图转到新视图的动画效果

    UIImageView* newCenterShow = [[UIImageView alloc]initWithFrame:self.centerShow.frame];    newCenterShow.image = [UIImage imageNamed:@"Service"];  

    [UIView transitionFromView:self.centerShow

                  toView:newCenterShow duration:1.0

                  options:UIViewAnimationOptionTransitionFlipFromLeft

    completion:^(BOOLfinished) {

            NSLog(@"动画结束");   

    }];

    内存管理

    UIView执行动画不会引起内存泄漏,因为UIView是一个类,没有被引用动画的self持有。

    Core Animation 核心动画 

    Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程.

    core Animation层级结构:

    核心动画作用在CALayer(Core animation layer)上

    核心动画位于UIKit的下一层,相比UIView动画,它可以实现更复杂的动画效果。

    核心动画和UIView动画的对比:UIView动画可以看成是对核心动画的封装,和UIView动画不同的是,通过核心动画改变layer的状态(比如position),动画执行完毕后实际上是没有改变的(表面上看起来已改变)。

    总体来说核心动画的优点有:

    1)性能强大,使用硬件加速,可以同时向多个图层添加不同的动画效果

    2)接口易用,只需要少量的代码就可以实现复杂的动画效果。

    3)运行在后台线程中,在动画过程中可以响应交互事件(UIView动画默认动画过程中不响应交互事件)。

    Core Animation是一组非常强大的动画处理API,简单分为以下几类:

           CABasicAnimation               基础动画

           CAKeyframeAnimation        帧动画

           CATransition 转场动画

      CAAnimationGroup           组动画,组中动画一起执行

      CASpringAnimation          弹簧动画

    继承关系:

           CATransition > CAAnimation

           CABasicAnimation > CAPropertyAnimation > CAAnimation

           CAKeyframeAnimation > CAPropertyAnimation > CAAnimation

    常用KeyPath总结

    常用属性

    fromValue byValue toValue

    repeatDuration: 动画的持续时间

    beginTime : 动画的开始时间

    repeatCount : 动画的重复次数

    autoreverses : 执行的动画按照原动画返回执行

    timingFunction : 控制动画的显示节奏系统提供五种值选择

    delegate : 动画代理。能够检测动画的执行和结束。

    @interface NSObject (CAAnimationDelegate)

     - (void)animationDidStart:(CAAnimation *)anim;

     - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;

    @end

    path:关键帧动画中的执行路径

    type:过渡动画的动画类型,系统提供了四种过渡动画。

    最后如果是用约束布局,动画可以用如下方法实现:

    [UIView animateWithDuration:0.5 animations:^{

            self.tableViewTop.constant = 100;

            [self.view layoutIfNeeded];

    }completion:^(BOOL finished) {

    }];

    相关文章

      网友评论

          本文标题:iOS-CoreAnimation 核心动画

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