CASpringAnimation使用和属性解析
来源:互联网 发布:unity3d 室内漫游 编辑:程序博客网 时间:2024/06/05 21:01
CASpringAnimation iOS9才引入的动画类,它继承于CABaseAnimation,用于制作弹簧动画效果。
首先来看一个简单的例子,钟摆:
如果没有阻力,将一直摇摆下去,如下图:
如果是无摩擦力情况下,那么就会类似于下图的运动轨迹:
在真实的世界中,系统将由于摩擦力的存在而缺少动力并最终停止在自己的平衡点。
这种情况下,那么就会类似于下图的运动轨迹:
我们可能会注意到一个钟摆的过程,其实会涉及到很多因数。UIKit能够让我们创建一个简单的弹性动画,当我们使用UIKit的弹性动画方法时:
UIView.animateWithDuration(duration: NSTimeInterval, delay: NSTimeInterval, usingSpringWithDamping dampingRatio: CGFloat, initialSpringVelocity velocity: CGFloat, options: UIViewAnimationOptions, animations: () -> Void, completion: ((Bool) -> Void)?)
该方法创建弹性动画时,我们只有usingSpringWithDamping(阻尼系数)和initialSpringVelocity(弹性的初始化速度)这两个参数与弹性动画相关。UIKit在给定的时间内使系统以动态的方式调整所有的变量,UIKit的弹性动画看起来有点急促,少量的不自然。幸运的是,Core Animation为我们提供了CASpringAnimation类创建合适的弹性动画效果,相当于渲染一个合理的物理模仿看起来效果感觉就更加真实了。
属性解析:
/** Subclass for mass-spring animations. */public class CASpringAnimation :CABasicAnimation { /*质量,影响图层运动时的弹簧惯性,质量越大,弹簧拉伸和压缩的幅度越大,动画的速度变慢.默认值为1*/ public var mass:CGFloat /*刚度系数(劲度系数/弹性系数),刚度系数越大,形变产生的力就越大,运动越快。默认值为100 */ public var stiffness:CGFloat /*阻尼系数,阻止弹簧伸缩的系数,阻尼系数越大,停止越快。默认值为10 */ public var damping:CGFloat /*初始速率,动画视图的初始速度大小,速率为正数时,速度方向与运动方向一致,速率为负数时,速度方向与运动方向相反*/ public var initialVelocity:CGFloat /* 结算时间返回弹簧动画到停止时的估算时间,根据当前的动画参数估算,通常弹簧动画的时间使用结算时间比较准确. */ public var settlingDuration:CFTimeInterval { get }}
下面使用CASpringAnimation的一个小demo:
//实现触摸屏幕,使红色小方块移动到对应的点,并且来回上下弹性运动。最好的方式理解属性,就是改不同的值,多试试效果。override func touchesBegan(touches:Set<UITouch>, withEvent event:UIEvent?) { let tounch = touches.first let tounchPoint = tounch?.locationInView(self.view) let moveAniamtion = CASpringAnimation(keyPath: "position") moveAniamtion.fromValue = NSValue.init(CGPoint: self.move.center) moveAniamtion.toValue = NSValue.init(CGPoint: tounchPoint!) moveAniamtion.damping = 5 //阻尼系数越大,停止越快 moveAniamtion.stiffness = 100 //刚度系数越大,形变产生的力就越大,运动越快 moveAniamtion.initialVelocity =0.0//速率为正数时,速度方向与运动方向一致,速率为负数时,速度方向与运动方向相反 moveAniamtion.mass = 1 //质量越大,弹簧拉伸和压缩的幅度越大 moveAniamtion.duration = moveAniamtion.settlingDuration self.move.layer.addAnimation(moveAniamtion, forKey:nil) self.move.center = tounchPoint!}
推荐的非官方弹簧动画实现:
JNWSpringAnimation:该库还提供了一个Mac端的工具来帮助你调试动画效果,而不需要你在模拟器或是真机上不断编译、调整、编译了。
Facebook's pop:一个强大的动画库。
RBBAnimation::官方的反编译版本,效果直追官方。
AnimationEngine:特点是像pop 一样使用 CADisplayLink 实现动画以及提供方便的Block 接口。
0 0
- CASpringAnimation使用和属性解析
- CAKeyframeAnimation(一)使用和属性全面解析
- swift2.0 CASpringAnimation 和 UIView.animateWithDuration 分别实现弹性动画
- 使用DOM解析xml文件的属性和值
- ios动画笔记(2)CATransform3D和CASpringAnimation 、CATransition和CAEmitterLayer、UIDynamicAnimator
- 实例034 使用SAX组件解析XML元素属性和属性值
- 解析Dom节点和属性
- CASpringAnimation的简单介绍
- 定义属性和使用属性
- 使用DOM解析XML的文件属性名和属性值、节点名和节点值
- Java使用DOM解析XML的文件属性名和属性值、节点名和节点值
- dom4j 解析元素无属性和有属性的xml文件,都使用反射进行注值
- 定义和使用属性
- MarshalAs属性和使用
- MarshalAs属性和使用
- 使用dom4j解析xml格式字符串,获取标签属性和内容
- 使用spring进行属性注入的实例解析(spring面向切面和控制反转)。
- 使用JAXB实现JAVA解析XML (节点大小写和属性的互相转换实例
- 对javascript匿名函数的理解
- C++第四次作业
- 最短作业优先(SJF)
- C++ 第二次上机实验
- Oracle EBS中设置项目字段必填
- CASpringAnimation使用和属性解析
- C++第一次实验1-1
- 最小生成树-Prim算法和Kruskal算法
- AJAX from提交出现乱码 各种解决方案
- 关于动态更新 安卓 TExtview的 代码
- Redis安装和启动
- [树链剖分 线段树 标记永久化] BZOJ 4515 [Sdoi2016]游戏
- svn“Previous operation has not finished; run 'cleanup' if it was interrupted“解决方法
- 使用Cocos开发一款简单的3D VR抓钱游戏