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

       未完待续。

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

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

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

  • 相关阅读:
    loaded some nib but the view outlet was not set
    指标评比
    IOS DEVELOP FOR DUMMIES
    软件测试题二
    javascript select
    DOM节点类型详解
    mysql操作
    UVA 10055
    solutions for 'No Suitable Driver Found For Jdbc'
    解决git中文乱码问题
  • 原文地址:https://www.cnblogs.com/iAronTalk/p/4777483.html
Copyright © 2011-2022 走看看