iOS技术专题iOS开发经验收集

iOS动画基础

2017-03-21  本文已影响39人  Jacky_Yang

导语

这段时间我们部门组织学习分享Core Animation,所以我就稍微整理了下关于动画这块的分享。

Core Animation其实是一个令人误解的命名,大多数人认为它只是用来做动画的,但实际上市一个叫做Layer Kit演变而来,所以动画只是Core Animation特性的冰山一角而已,接下来我们就讨论下这个冰山一角的常规用法,纯粹是抛砖引玉。

一、基础知识

1、动画的本质
2、动画实现方式

二、动画实现

关键帧动画
1、CABasicAnimation

1、动画的属性


1485148932685541.png

2、属性值的解释

使用方法
    pathAnim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
示例
旋转动画.gif 背景颜色变化动画.gif 1485149752466446.gif size大小缩放、透明值变化动画.gif
2、CAKeyframeAnimation

CAKeyframeAnimation是核心动画里面的帧动画,它提供了按照指定的一串值进行动画,好像拍电影一样的一帧一帧的效果

 UIView *tempView = [[UIView alloc] initWithFrame:CGRectMake(50, 100, 250, 250)];
    
    UIBezierPath *bezierPath = [UIBezierPath bezierPathWithOvalInRect:tempView.frame];
    UIView *animView = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 70, 80)];
    animView.backgroundColor = [UIColor redColor];
    [self.view addSubview:animView];
    
    CAKeyframeAnimation *orbitAnim = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    orbitAnim.duration = 5;
    orbitAnim.path = bezierPath.CGPath;
    orbitAnim.calculationMode = kCAAnimationPaced;
    orbitAnim.fillMode = kCAFillModeForwards;
    orbitAnim.repeatCount = INFINITY;
    orbitAnim.rotationMode = kCAAnimationRotateAutoReverse;
    [animView.layer addAnimation:orbitAnim forKey:@"orbitAnim"];
    
    CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init];
    shapeLayer.strokeColor = [UIColor purpleColor].CGColor;
    shapeLayer.fillColor = [UIColor clearColor].CGColor;
    shapeLayer.lineWidth = 0.5;
    shapeLayer.lineJoin = kCALineJoinRound;
    shapeLayer.lineCap = kCALineCapRound;
    shapeLayer.path = bezierPath.CGPath;
    [self.view.layer addSublayer:shapeLayer];
CAKeyframeAnimation路径动画.gif
3、CATransition

主要用于转场动画从一个场景以动画的形式过渡到另一个场景

另外还有一些系统未公开的动画效果:

["cube", "suckEffect", "rippleEffect", "pageCurl", "pageUnCurl", "oglFlip", "cameraIrisHollowOpen", "cameraIrisHollowClose", "spewEffect","genieEffect","unGenieEffect","twist","tubey","swirl","charminUltra", "zoomyIn", "zoomyOut", "oglApplicationSuspend"]

代码示例:

CATransition *pageCurlAnim = [[CATransition alloc] init];
    pageCurlAnim.delegate = self;
    pageCurlAnim.duration = 1.0;
    pageCurlAnim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
    pageCurlAnim.type = animArr[index];
    pageCurlAnim.subtype = kCATransitionFromLeft;
    pageCurlAnim.repeatCount = 1;
    [pageCurlAnim setValue:@"transitionAnim" forKey:@"anim"];
    [transitionLab.layer addAnimation:pageCurlAnim forKey:@"transition"];
4、CASpringAnimation

iOS9才引入的动画类,在以前我们都是使用facebook的pop来做这种弹簧效果,它继承于CABaseAnimation,用于制作弹簧动画

参数说明
逐帧动画

实际就是周期性的(CADisplayLink)对UIView背后的CALayer的修改
著名的facebook的pop动画框架,就是使用CADisplayLink这种逐帧绘制的方式。

三、关键帧与逐帧对比

四、一些有意思的动画

正弦曲线.gif 粒子动画.gif

最后附 demohttps://github.com/yangbin911213/YBAnimation

上一篇 下一篇

猜你喜欢

热点阅读