具有动画效果的keyPath

     //CATransform3D Key Paths : (example)transform.rotation.z
//rotation.x
//rotation.y
//rotation.z
//rotation 旋轉
//scale.x
//scale.y
//scale.z
//scale 缩放
//translation.x
//translation.y
//translation.z
//translation 平移
//CGPoint Key Paths : (example)position.x
//x
//y
//CGRect Key Paths : (example)bounds.size.width
//origin.x
//origin.y
//origin
//size.width
//size.height
//size
//opacity
//backgroundColor
//cornerRadius
//borderWidth
//contents
//Shadow Key Path:
//shadowColor
//shadowOffset
//shadowOpacity
//shadowRadius

CATransition

@property(copy) NSString *type;//转场动画的类型
@property(nullable, copy) NSString *subtype;//转场动画去往的方向
@property float startProgress;//开始的位置进度【0,1】
@property float endProgress;//结束的位置进度【0,1】
@property(nullable, strong) id filter;//为动画添加可选滤镜,必须同时支持x和y,设置后type和subtype失效(iOS5.0之后支持,默认值是nil)
/* Common transition types. */

CA_EXTERN NSString * const kCATransitionFade//淡出效果
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
CA_EXTERN NSString * const kCATransitionMoveIn//新视图移动到旧视图上
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
CA_EXTERN NSString * const kCATransitionPush//新视图退出旧视图
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
CA_EXTERN NSString * const kCATransitionReveal//移开旧视图显示新视图
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0); /* Common transition subtypes. */ CA_EXTERN NSString * const kCATransitionFromRight//从右侧转场
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
CA_EXTERN NSString * const kCATransitionFromLeft//从右侧转场
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
CA_EXTERN NSString * const kCATransitionFromTop//从顶部转场
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
CA_EXTERN NSString * const kCATransitionFromBottom//从底部转场
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0); 私有的type
["cube", "suckEffect", "rippleEffect", "pageCurl", "pageUnCurl", "oglFlip", "cameraIrisHollowOpen",
"cameraIrisHollowClose", "spewEffect","genieEffect","unGenieEffect","twist","tubey","swirl","charminUltra",
"zoomyIn", "zoomyOut", "oglApplicationSuspend"]
- (void)setTransitionAni{
CATransition *ani = [CATransition animation];
ani.type = kCATransitionFade;
ani.subtype = kCATransitionFromLeft;
ani.duration = 1.3;
self.imageView.backgroundColor = [UIColor greenColor];
[self.imageView.layer addAnimation:ani forKey:@"transition"];
}

CAAnimationGroup

- (void)setGroupAni{
CAAnimationGroup *ani = [CAAnimationGroup animation]; CABasicAnimation *basicAni = [CABasicAnimation animationWithKeyPath:@"position"];
basicAni.toValue = [NSValue valueWithCGRect:CGRectMake(,, , )]; CABasicAnimation *boundxAni = [CABasicAnimation animationWithKeyPath:@"bounds"];
boundxAni.toValue = [NSValue valueWithCGRect:CGRectMake(,, , )]; CABasicAnimation *opAni = [CABasicAnimation animationWithKeyPath:@"opacity"];
opAni.fromValue = [NSNumber numberWithFloat:.]; ani.animations = @[basicAni,boundxAni,opAni];
ani.duration = ;
ani.fillMode = kCAFillModeForwards;
ani.removedOnCompletion = NO;
ani.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[self.imageView.layer addAnimation:ani forKey:@"groupAni"];
}

CAKeyframeAnimation

  关键帧动画,可以设置每一帧的时间,坐标;也可以设置动画的路径path。

@property(nullable, copy) NSArray *values;//关键帧数组对象 1
@property(nullable) CGPathRef path;//动画路径对象 2(只对layer的anchorPoint或position属性起作用)
@property(nullable, copy) NSArray<NSNumber *> *keyTimes;//关键帧时间数组(值是0-1)1
@property(nullable, copy) NSArray<CAMediaTimingFunction *> *timingFunctions;//关键帧速率样式数组1
@property(copy) NSString *calculationMode;//值可以是'discrete', 'linear', 'paced', 'cubic'和'cubicPaced'。默认值是linear。2(对anchorPoint和position进行的动画)
@property(nullable, copy) NSArray<NSNumber *> *tensionValues;//动画的张力【-1,1】
@property(nullable, copy) NSArray<NSNumber *> *continuityValues;//动画的连续性值
@property(nullable, copy) NSArray<NSNumber *> *biasValues;//动画的偏斜率
@property(nullable, copy) NSString *rotationMode;//做动画的时候沿着路径的切线方向

  kCAAnimationLinear calculationMode的默认值,表示当关键帧为座标点的时候,关键帧之间直接直线相连进行插值计算; 

  kCAAnimationDiscrete 离散的,就是不进行插值计算,所有关键帧直接逐个进行显示; 

  kCAAnimationPaced 使得动画均匀进行,而不是按keyTimes设置的或者按关键帧平分时间,此时keyTimes和timingFunctions无效; 

  kCAAnimationCubic 对关键帧为座标点的关键帧进行圆滑曲线相连后插值计算,对于曲线的形状还可以通过tensionValues,continuityValues,biasValues来进行调整自定义,这里的数学原理是Kochanek–Bartels spline,这里的主要目的是使得运行的轨迹变得圆滑; 

  kCAAnimationCubicPaced 看这个名字就知道和kCAAnimationCubic有一定联系,其实就是在kCAAnimationCubic的基础上使得动画运行变得均匀,就是系统时间内运动的距离相同,此时keyTimes以及timingFunctions也是无效的.

/* `calculationMode' strings. */

CA_EXTERN NSString * const kCAAnimationLinear
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
CA_EXTERN NSString * const kCAAnimationDiscrete
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
CA_EXTERN NSString * const kCAAnimationPaced
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
CA_EXTERN NSString * const kCAAnimationCubic
CA_AVAILABLE_STARTING (10.7, 4.0, 9.0, 2.0);
CA_EXTERN NSString * const kCAAnimationCubicPaced
CA_AVAILABLE_STARTING (10.7, 4.0, 9.0, 2.0); /* `rotationMode' strings. */ CA_EXTERN NSString * const kCAAnimationRotateAuto//自动旋转
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
CA_EXTERN NSString * const kCAAnimationRotateAutoReverse//自动翻转
CA_AVAILABLE_STARTING (10.5, 2.0, 9.0, 2.0);
- (void)setKeyframeAni{
CAKeyframeAnimation *keyAni = [CAKeyframeAnimation animationWithKeyPath:@"position"];
keyAni.duration = ;
keyAni.removedOnCompletion = NO;
keyAni.fillMode = kCAFillModeForwards;
keyAni.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
// keyAni.timingFunctions
NSValue * value1 = [NSValue valueWithCGPoint:CGPointMake(, )];
NSValue *value2=[NSValue valueWithCGPoint:CGPointMake(, )];
NSValue *value3=[NSValue valueWithCGPoint:CGPointMake(, )];
NSValue *value4=[NSValue valueWithCGPoint:CGPointMake(, )];
NSValue *value5=[NSValue valueWithCGPoint:CGPointMake(, )];
keyAni.values = @[value1, value2, value3, value4, value5];
[self.imageView.layer addAnimation:keyAni forKey:@"keyAni"];
}

CABasicAnimation

  CABasicAnimation可以看做是一种CAKeyframeAnimation的简单动画,只有两个关键帧动画,且是匀速直线运动。

@property(nullable, strong) id fromValue;//改变到指定位置再复位
@property(nullable, strong) id toValue;//改变到指定位置
@property(nullable, strong) id byValue;//在原来基础上增加改变量
- (void)setBasicAni{
CABasicAnimation *basicAni = [CABasicAnimation animationWithKeyPath:@"position.x"];
basicAni.toValue = [NSValue valueWithCGRect:CGRectMake(,, , )];
basicAni.removedOnCompletion = NO;
basicAni.fillMode = kCAFillModeForwards;
[self.imageView.layer addAnimation:basicAni forKey:@"basicAni"];
}

CATransaction(事务:是核心动画里的一个单元)

  事务分为隐式和显式:

  1.隐式:没有明显调用事务的方法,由系统自动生成事务。比如直接设置一个layer的position属性,则会在当前线程自动生成一个事务,并在下一个runLoop中自动commit事务。

  2.显式:明显调用事务的方法([CATransaction begin]和[CATransaction commit])。

- (void)catransactionAni{
[CATransaction begin];
[CATransaction setAnimationDuration:];
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
self.imageView.layer.opacity =.;
[CATransaction commit];
}

CASpringAnimation  

@property CGFloat mass;//质量(影响弹簧的惯性,质量越大,弹簧惯性越大,运动的幅度越大)
@property CGFloat stiffness;//弹性系数(弹性系数越大,弹簧的运动越快)
@property CGFloat damping;//阻尼系数(阻尼系数越大,弹簧的停止越快)
@property CGFloat initialVelocity;//初始速度(弹簧动画的初始速度大小,弹簧运动的初始方向与初始速率的正负一致,若初始速递为0,表示忽略该属性)
@property(readonly) CFTimeInterval settlingDuration;//结束时间(只读)
- (void)setSpringAni{
CASpringAnimation *ani = [CASpringAnimation animationWithKeyPath:@"bounds"];
ani.mass = 8.0;
ani.stiffness = ;
ani.damping = 120.0;
ani.initialVelocity = .f;
ani.duration = ani.settlingDuration;
ani.toValue = [NSValue valueWithCGRect:CGRectMake(,, , )];
ani.removedOnCompletion = NO;
ani.fillMode = kCAFillModeForwards;
ani.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[self.imageView.layer addAnimation:ani forKey:@"springAni"];
}

CAAnimation动画的更多相关文章

  1. 再谈CAAnimation动画

    CAAnimaton动画分为CABasicAnimation & CAKeyframeAnimation CABasicAnimation动画, 顾名思义就是最基本的动画, 老规矩先上代码: ...

  2. CAAnimation 动画支撑系统

    Model支撑:(依附对象) 从presentLayer获取数据: 渲染树为私有: -(void)addAnimation:(CAAnimation *)anim forKey:(NSString * ...

  3. CAAnimation动画--(旋转/缩放/移动/闪烁)

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #1d9421 } p.p2 { margin: 0.0px 0. ...

  4. iOS:核心动画的详解介绍:CAAnimation(抽象类)及其子类

    核心动画的详解介绍:CAAnimation(抽象类)   1.核心动画基本概念 Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍! 使用它 ...

  5. CATransition自定义转场动画

    我们可以通过CATransiton来自定义一些漂亮的转场动画, CATransition继承自CAAnimation, 所以用法跟CAAnimation差不多 先直接上一个代码: #import &q ...

  6. Objective-c 动画

    想提高下以后做的应用给客户带去的体验,所以看了几天OC的CAAnimation动画类,也做了几个小案例,下面讲个别案例来做为本文的主要内容. 一:继承结构截图 上面截图中用得最多的类大概就是,CABa ...

  7. iOS开发——UI进阶篇(十七)CALayer,核心动画基本使用

    一.CALayer简介 1.CALayer在iOS中,文本输入框.一个图标等等,这些都是UIView你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个其实UIView之所以 ...

  8. iOS 用CALayer实现动画

    与动画有关的几个类的继承关系 涉及到动画的类主要有6个,看一下它们的基本用途: 1. CAAnimation  动画基类 2. CAAnimationGroup 组合多个动画 3. CAPropert ...

  9. Swift 动画学习笔记

    视频地址: http://www.swiftv.cn/course/i275v5lz 1,动画属性 position(位置),opacity(透明度,0 全透明,1 不透明),Scale(尺寸),Co ...

随机推荐

  1. Servlet接口的抽象方法实现

    1.init:初始化方法,在Servlet被创建时执行,只会执行一次2.service:提供服务,每此Servelet被访问时service都会执行3.destroy:销毁方法,在服务器正常关闭时执行 ...

  2. ARM GNU 专有符号

    1. @ 表示注释从当前位置到行尾的字符. 2. # 注释掉一整行. 3. ; 新行分隔符.

  3. JS对象 向上取整ceil() ceil() 方法可对一个数进行向上取整。 语法: Math.ceil(x) 注意:它返回的是大于或等于x,并且与x最接近的整数。

    向上取整ceil() ceil() 方法可对一个数进行向上取整. 语法: Math.ceil(x) 参数说明: 注意:它返回的是大于或等于x,并且与x最接近的整数. 我们将把 ceil() 方法运用到 ...

  4. GetOpenFilename的基本用法

    GetOpenFilename '一.概述基本语法 Application.GetOpenFilename 方法 显示标准的“打开”对话框,并获取用户文件名,而不必真正打开任何文件,只是把打开文件名称 ...

  5. BCZM : 1.7

    光影切割 在一个平面内有一个矩形区域,直线穿过矩形可以将其分割为不同的区域,且在这个平面中不存在三条直线相交一点的情况.求当有N条直线穿过矩形时,它被分割为多少个区域? 解法一:      平面倍划分 ...

  6. CSIC_716_20191115【内置函数、递归、模块、软件开发规范】

    内置函数 map map映射:语法结构(函数对象,可迭代对象) 依次从可迭代对象中取值,然后给函数做运算,再依次返回运算的结果. ss = map(lambda x: x + x, [1, 2, 3] ...

  7. js实现点击空白处隐藏

    部分业务要求除了某元素外点击其他对象,对应的元素隐藏,下面是一个demo效果, <!DOCTYPE html> <html> <head> <meta cha ...

  8. 【JZOJ6389】小w学图论

    description 小w这学期选了门图论课,他在学习点着色的知识.他现在得到了一张无向图,并希望在这张图上使用最多n种颜色给每个节点染色,使得任意一条边关联的两个节点颜色不同. 小w获得一张n个节 ...

  9. thinkphp 分布式数据库支持

    ThinkPHP内置了分布式数据库的支持,包括主从式数据库的读写分离,但是分布式数据库必须是相同的数据库类型. 配置DB_DEPLOY_TYPE 为1 可以采用分布式数据库支持.如果采用分布式数据库, ...

  10. LUOGU P1084 疫情控制(二分+贪心+树上倍增)

    传送门 解题思路 比较神的一道题.首先发现是最小值问题,并且具有单调性,所以要考虑二分答案.其次有一个性质是军队越靠上越优,所以我们要将所有的军队尽量向上提,这一过程我们用倍增实现.发现这时有两种军队 ...