翻译自:QUICK GUIDE: ANIMATIONS WITH UIVIEWPROPERTYANIMATOR
译者:Haley_Wong

iOS 10 带来了一大票有意思的新特性,像 UIViewPropertyAnimator,它是一个改善动画处理的全新的类。
这个视图属性动画完全颠覆了我们已经习惯的流程,能够为动画逻辑添加更精细的控制。

一个简单的动画

让我们来看看如何通过一个简单的动画改变视图的中心点属性。

let animator = UIViewPropertyAnimator(duration: 1.0, curve: .easeOut){AView.center = finalPoint
}
animator.startAnimation()

至少有3点需要注意:
1) 这个动画是通过闭包来定义的,与UIView 的动画类很相似“UIView.animation(duration:…)”。
2) 返回一个对象,即动画创建者。
3)这个动画不是立刻开始的,而是通过 startAnimation()方法触发的。

动画状态

我们对一个元素执行动画操作方式的主要变化与以下事实有关:一个属性动画器包含一整套状态机逻辑。通过UIViewAnimating协议实现的功能以一种简单明了的方式管理动画的状态,而这些状态又是通过startAnimation, pauseAnimationstopAnimation函数来实现的。调用这些方法我们可以更新状态的值,使之能在active,inactivestopped之间转换。

当动画开始或者暂停时,动画的状态就是活跃状态;当动画已被初始化但是还未开始或者动画已完成,它就是非活跃状态。需要注意的是 在活跃状态停止态之间有一点点不同。当动画因停止命令而完成或者它真的已经完成后,状态会变成停止态,动画器内部会调用方法finishAnimation(at:) 来标记动画 已完成,将状态设置为非活跃状态,并最终调用完成的代码块。

动画的可选项

可能你已经在前面的例子里注意到,挨着动画的 block,我们定义了两个参数:动画的时长 和动画的曲线,一个UIViewAnimationCurve实例,代表着最常见的曲线(easeIn,easeOut,linear或easeInOut)。

如果你需要对动画取消有更多的控制,你可以用由两个控制点定义的贝塞尔曲线。

let animator = UIViewPropertyAnimator(duration: 1.0, point1: CGPoint(0.1,0.5), point2: CGPoint(0.5, 0.2){AView.alpha = 0.0
}

(如果一条贝塞尔曲线依然不够,那么你甚至可以利用UITimigCurveProvider来指定一条完全自定义的曲线)

另一个可以传给构造器的有意思的参数是 阻尼系数值。用法与UIView 的动画方法类似,你可以定义出弹簧效果,阻尼系数的取值范围是0到1.

let animator = UIViewPropertyAnimator(duration: 1.0,dampingRatio:0.4){AView.center = CGPoint(x:0, y:0)
}

延迟动画的执行也非常的简单,只需要调用 带有afterDelay参数的startAnimation方法即可。

animator.startAnimation(afterDelay:2.5)

动画的block

UIViewPropertyAnimator 采用的是能够为动画器提供很多有趣能力的UIViewImplicitlyAnimating协议。例如,除了在初始化的时候指定的block外,你还可以指定多个动画block。

// Initialization
let animator = UIViewPropertyAnimator(duration: 2.0, curve: .easeOut){AView.alpha = 0.0
}
// Another animation block
animator.addAnimation{ Aview.center = aNewPosition
}
animator.startAnimation()

你还可以向已在运行的动画添加动画块,该动画块将立即使用剩余时间作为新动画的持续时间来执行。

与动画流交互

正如我们已提过的那样,我们可以通过调用startAnimation, pauseAnimationstopAnimation轻松地与动画流交互。动画的默认流(从起始点到结束点),能通过fractionComplete属性更改。这个值表示动画完成的百分比,取值范围是0 到 1。你能够修改这个值来像你期望的那样驱动流(例如:用户可能会用滑块或滑动手势实时地修改fraction)。

animator.fractionComplete = slider.value

某些情形下,你可能希望在动画运行完毕时执行一些操作。 addCompletion 方法能让你添加一个(当动画完成时会被触发的)代码块。

animator.addCompletion { (position) inprint("Animation completed")
}

position参数是一个 UIViewAnimatingPosition类型的值,它有三个枚举值,分别代表动画是在开始停止,结束后停止,还是当前位置停止。 通常你都会收到结束的枚举值。
(译者注:UIViewAnimatingPosition的三个枚举值分别是end,start,current)

这就是这份快速指南的全部内容啦。
我已经迫不及待地想要用这个新的动画系统来实现一些很酷的UI 效果了。我会在我的Twitter 上分享我的经验!

(译)快速指南:用UIViewPropertyAnimator做动画相关推荐

  1. 如何用计算机做微积分,利用计算知识搜索引擎WolframAlpha做微积分(快速指南).doc...

    利用计算知识搜索引擎WolframAlpha做微积分 快速指南 说明:点击各个公式进入WolframAlpha网页,然后将其中的函数换成需要计算函数即可.求极限?lim sin2x/(e^x-1), ...

  2. Emacs 快速指南

    -折叠目录 1. 小结(SUMMARY) 2. 基本的光标控制(BASIC CURSOR CONTROL) 3. 如果 EMACS 失去响应(IF EMACS STOPS RESPONDING) 4. ...

  3. 《树莓派Python编程指南》—— 1.3 树莓派快速指南

    本节书摘来自华章计算机<树莓派Python编程指南>一书中的第1章,第1.3节,作者:(美) Alex Bradbury Ben Everard更多章节内容可以访问云栖社区"华章 ...

  4. react 快速上手开发_React中测试驱动开发的快速指南

    react 快速上手开发 by Michał Baranowski 通过MichałBaranowski React中测试驱动开发的快速指南 (A quick guide to test-driven ...

  5. 快速指南:在DevOps中实现持续交付

    [编者的话]时至今日,以几乎相同的步调实现开发与交付已经成为一种必需.本份快速指南将帮助大家弄了解持续交付概念中的那些"良方"与"毒药". [烧脑式Kubern ...

  6. spring_Spring Boot登录选项快速指南

    spring "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验 ...

  7. oauth2_带有Spring Security的OAuth 2.0快速指南

    oauth2 "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验 ...

  8. 从 C++ 到 Objective-C 的快速指南 【已翻译100%】

    **简介 ** 当我开始为iOS写代码的时候,我意识到,作为一个C++开发者,我必须花费更多的时间来弄清楚Objective-C中怪异的东西.这就是一个帮助C++专家的快速指南,能够使他们快速的掌握A ...

  9. Spring Boot登录选项快速指南

    "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. 在本文中 ...

最新文章

  1. Simple Dynamic Strings(SDS)源码解析和使用说明二
  2. C#-DataTable分页代码
  3. 警惕由于使用YYYY-MM-dd引发的一场生产问题
  4. POJ - 1328 Radar Installation(贪心+思维)
  5. ArrayList和Vector的异同
  6. OpenEIM以前在合作伙伴做的时候
  7. SAP License:CO-FI实时集成
  8. mac 安装php swoole扩展
  9. 算法导论第三版 第一章答案
  10. hadoop基础【Shuffle全部流程、OutputFormat输出、ReduceJoin案例实操】
  11. xp系统打印机服务器win7连接不了,xp连不上win7的打印机,win7连接打印机
  12. Java -- 每日一问:谈谈常用的分布式ID的设计方案?Snowflake是否受冬令时切换影响?
  13. android加速度传感器 源码,Android项目源码利用加速度传感器实现计步
  14. 2021年美国大学生数学建模竞赛(题目详细介绍)
  15. 贾伟:因痛而生,打造真正的产品思维(荐书)
  16. 深度USB启动盘制作工具(用u盘装系统)
  17. 纯JS写的小众游戏——走四棋
  18. 深入浅出Google Clould Platform (1)----GCP 考证
  19. 16位字长的计算机,十六位字长的计算机是指计算机16位十进制数的计算机吗
  20. fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突

热门文章

  1. Dadroit JSON Viewer 查看json文件的利器
  2. 编个故事,骗700元的稿费真容易啊!
  3. ipv6被拒的解决方法
  4. 一根木根随机折成三截能拼成三角形的概率
  5. REmap包介绍及使用
  6. 手机怎么扫描照片成电子版?手把手教你快速搞定
  7. Notepad++的64位HexEditor免费下载
  8. 最牛逼的java代码_分享史上java最牛逼,最简短的代码
  9. 压网线教程图解(做水晶头)
  10. 苹果为M1 MacBook Air/Pro提供自助维修服务 维修成本更低