zoukankan      html  css  js  c++  java
  • "MindManager"学习iOS系列之"CAAnimation-核心动画"详解,让你的应用“动”起来。

    "MindManager"学习iOS系列之"CAAnimation-核心动画"详解,思维导图内展示了CAAnimation-核心动画的大多数基本功能和知识,每个part都有代码讲解,展示出CAAnimation-核心动画的清晰轮廓,编者提供了"JPG"、"SWF"、"PDF"、"Word"、"Mmap"格式的源文件供给使用。注意:JPG格式仅为图片总览,SWF格式使用微软IE浏览器浏览即可,Word以全文本形式给出框架图,Mmap格式体会MindManager的魅力。To Be Continue,CAAnimation-核心动画的新知识,新想法,新思路慢慢更新,欢迎提出宝贵建议。

    -=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

      iAronTalk Blog opens.

      The study certainly is not the life complete. But, since continually life part of - studies also is unable to conquer, what but also can make?

    -=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

      各种类型文件的下载地址:http://pan.baidu.com/s/1pJnBtLh

      在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画、关键帧动画、动画组、转场动画,如何通过UIView的装饰方法对这些动画操作进行简化等。在今天的文章里您可以看到动画操作在iOS中是如何简单和高效,很多原来想做但是苦于没有思路的动画在iOS中将变得越发简单。

      

      每个小知识点中都有相应的demo说明。

      -=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

      后续会将集成导出的word内容展示在后面,系统自动集成,与作者原用意略有差异,使用SWF"、"PDF"、"Mmap"格式最佳。 

    Core Animation CAAnimation (抽象类)

    1 继承结构CAAnimation

    1.1 CATransition

    1.2 CAAnimationGroup

    1.3 CAPropertyAnimation 抽象类

    1.3.1 CABasicAnimation

    1.3.2 CAKeyFrameAnimation

    2  何为CAAnimation

    2.1 CAAnimation性格分析

    2.2 属性

    参阅: 协议属性

    ·removedOnCompletion:默认为YES,代表动画执行完毕后就从图层上移除,图形会恢复到    动画执行前的状态。

        如果想让图层保持显示动画执行后的状态,那就设置为NO,不过还要设置fillMode为    kCAFillModeForwards

    ·timingFunction:速度控制函数,控制动画运行的节奏

    ·delegate:动画代理

    ·fillMode属性 (要想fillMode有效,最好设置removeOnCompletion = NO)

        ·kCAFillModeRemoved 默认值,动画开始前和动画结束后,动画对layer都没有影

             响,动画结束后,layer会恢复到动画开始前的状态

        ·kCAFillModeForwards 当动画结束后,layer会保持动画最后的显示状态

        ·kCAFillModeBackwards 在动画开始前,只需要将动画加入了一个layer, layer便

             立即进入动画的初始状态并等待动画的开始

        ·kCAFillModeBoth 上面两个的合成,动画加入后开始前,layer便处于动画初始状

             态,动画结束后layer保持动画最后的状态

    ·速度控制函数(CAMediaTimingFunction)

        ·kCAMediaTimingFunctionLinear(线性):匀速,给你一个相对静态的感觉

        ·kCAMediaTimingFunctionEaseIn(渐进):动画缓慢进入,然后加速离开

        ·kCAMediaTimingFunctionEaseOut(渐出):动画全速进入,然后减速的到

             达目的地

        ·kCAMediaTimingFunctionEaseInEaseOut(渐进渐出):动画缓慢的进

        入,中间加速,然后减速的到达目的地。这个是默认的动画行为。

    3 CAMediaTiming(协议)

    3.1 协议属性

    ·duration:动画的持续时间

    ·repeatCount:重复次数,无限循环可以设置HUGE_VALF或者MAXFLOAT

    ·repeatDuration:重复时间

    ·fillMode:决定当前对象在非active时间段的行为。比如动画开始之前或者动画结束之后

    ·CACurrentMediaTime()为图层的当前时间

    ·beginTime:可以用来设置动画延迟执行时间,若想延迟2s,就设置为    CACurrentMediaTime()+2。

    4 Main Topic

    5 进入CCAnimation的世界

    5.1 CATransition

    1) CATransition是CAAnimation的子类,用于做转场动画,能够为层提供移出

        屏幕和移入屏幕的动画效果。iOS比Mac OS X的转场动画效果少一点

    2) UINavigationController就是通过CATransition实现了将控制器的视图推入屏

        幕的动画效果.

    3) 动画属性:

        ·type:动画过渡类型

        ·subtype:动画过渡方向

        ·startProgress:动画起点(在整体动画的百分比)

        ·endProgress:动画终点(在整体动画的百分比)

    4) type:动画过渡类型,如图:

    5)

    5.1.1 .h

    //  ViewController.h

    //  CAAnimation03

    #import <UIKit/UIKit.h>

    @interface ViewController : UIViewController

    {

        UIView *_superView;

    }

    @end

    5.1.2 .m

    //  ViewController.m

    //  CAAnimation03

    #import "ViewController.h"

    @interface ViewController ()

    @end

    @implementation ViewController

    - (void)viewDidLoad {

        [super viewDidLoad];

        // 核心动画

        // 1.创建视图

        _superView = [[UIView alloc] initWithFrame:self.view.bounds];

        _superView.backgroundColor = [UIColor whiteColor];

        [self.view addSubview:_superView];

        // 01 创建视图1

        UIView *view1 = [[UIView alloc] initWithFrame:self.view.bounds];

        view1.backgroundColor = [UIColor orangeColor];

        [_superView addSubview:view1];

        // 02 创建视图2

        UIView *view2 = [[UIView alloc] initWithFrame:self.view.bounds];

        view2.backgroundColor = [UIColor redColor];

        [_superView addSubview:view2];

    }

    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

    {

        // 1.创建动画对象

        CATransition *transition = [CATransition animation];

        transition.duration = .35;

        // 设置加速方式

        transition.timingFunction = [CAMediaTimingFunction functionWithName:@"default"];

        // 设置动画样式

      //·type:动画过渡类型

      //·subtype:动画过渡方向

        transition.type = @"cameraIrisHollowOpen";

        transition.subtype = kCATransitionFromRight;

        [_superView.layer addAnimation:transition forKey:@"transition"];

        // 切换视图

        [_superView exchangeSubviewAtIndex:0 withSubviewAtIndex:1];

        

    }

    @end

    5.2 CABasicAnimation

    5.2.1 .h

    //  ViewController.h

    //  CABasicAnimation04

    //

    //

    本例使用storyboard创建,适合有点基础的学习。

    #import <UIKit/UIKit.h>

    @interface ViewController : UIViewController

    {

        UIView *_subView;

        // 暂停的事件

        CFTimeInterval _timeInterval;

        // 当前暂停时刻

        CFTimeInterval _newStopTime;

        

    }

    - (IBAction)startAction:(id)sender;

    - (IBAction)stopAction:(id)sender;

    - (IBAction)remveAction:(id)sender;

    @end

    5.2.2 .m

    //  ViewController.m

    //  CABasicAnimation04

    #import "ViewController.h"

    @implementation ViewController

    - (void)viewDidLoad {

        [super viewDidLoad];

        _subView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];

        _subView.backgroundColor = [UIColor redColor];

        [self.view addSubview:_subView];

    }

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

    {

        // 使用CABasicAnimation设置动画

    CABasicAnimation*basic=[CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];

        // 设置开始位置

        basic.fromValue = @(0);

        basic.toValue = @(M_PI * 2);

        // 设置动画执行完成的一个状态

        basic.fillMode = kCAFillModeForwards;

        basic.removedOnCompletion = NO;

        // 配置动画事件

        basic.duration = 2;

        basic.repeatCount = 100;

        // 还原的时候也有动画效果

        basic.autoreverses = NO;

        [_subView.layer addAnimation:basic forKey:@"basicKey"];

    }

    - (IBAction)startAction:(id)sender {

        // 恢复动画

        // 1.恢复速度

        _subView.layer.speed = 1.0;

        // 2.设置延迟实行事件

        _timeInterval += CACurrentMediaTime() - _newStopTime;

        _subView.layer.beginTime  = _timeInterval;

        NSLog(@"%f",_subView.layer.timeOffset);

        // 3.取消之前的位置设置

        _subView.layer.timeOffset = 0;

    }

    - (IBAction)stopAction:(id)sender {

        // 设置layer的移动速度为0,相当于停止了

        _subView.layer.speed = 0.0;            

        // 设置layer位置,是相对于时间的位置

        _newStopTime = CACurrentMediaTime();

        _subView.layer.timeOffset = _newStopTime;

    }

    - (IBAction)remveAction:(id)sender {

        [_subView.layer removeAnimationForKey:@"basicKey"];

    }

    @end

    5.3 CAKeyFrameAnimation

    5.4 CAAnimationGroup

       未完待续。

      -=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

      由于编者水平有限,不妥之处在所难免,恳请各个大牛批评指正,提出宝贵建议。

      版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    201671010119 2016-2017-2《Java程序设计》第十四周学习心得
    201671010119 2016-2017-2《Java程序设计》第十三周学习心得
    201671010119 2016-2017-2《Java程序设计》第十二周学习心得
    201671010119 2016-2017-2《Java程序设计》第十一周学习心得
    201671010119 2016-2017-2《Java程序设计》第十周学习心得
    201671010119 2016-2017-2《Java程序设计》第九周学习心得
    201671010118 2016-2017-2《Java程序设计》 面向对象程序设计课程学习进度条
    201671010118 2016-2017-2《Java程序设计》 第十八周学习心得
    201671010118 2016-2017-2《Java程序设计》 第十七周学习心得
    201671010118 2016-2017-2《Java程序设计》 第十六周学习心得
  • 原文地址:https://www.cnblogs.com/iAronTalk/p/4777483.html
Copyright © 2011-2022 走看看