"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

   未完待续。

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

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

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

原文地址:https://www.cnblogs.com/iAronTalk/p/4777483.html