去年Apple的新操作系统版本中没有很多新的框架和API。相反,重点显然在于引擎盖下的改进和性能提升,就像WWDC主题演讲中提到的那样。Apple已经取得了一些非常好的改进的另一个领域是他们的一些低级框架如何导入Swift - 特殊性Core Animation。

核心动画可以说是Apple平台上最重要的框架之一,因为它为所有设备的UI提供了很大的支持。在我的演讲*“超越动画与核心动画”中*,我展示了Core Animation 不仅是一个动画框架 - 它还是一个功能强大的通用渲染工具,可以通过多种不同的方式在应用程序中创建自定义图形。

在今天的WWDC更新中,让我们来看看今年的Core Animation如何变得更加*“Swifty”*,这要归功于一些更好的注释以及之前依赖于字符串的API现在使用了多少综合枚举和选项集。

形状

绘制程序化形状可以是一种很好的方法,可以删除依赖于分辨率的资源,并使应用程序中的内容更具动态性。用于绘制自定义形状的API逐年变得更好,更好用于Swift,今年所有的字符串常量都变成了正确的类型。例如,现在我们可以使用点语法以类型安全的方式将圆边添加到一行:

let line = CAShapeLayer()
line.lineCap = .round
复制代码

对于更复杂的形状,我们现在还可以使用点语法来描述使用颜色填充重叠形状时的自定义填充模式:

let shape = CAShapeLayer()
shape.fillRule = .evenOdd
复制代码

之前,上述两个属性都使用字符串,导致更难的API可发现性和更少的类型安全性。

我将CAShapeLayer在我的“核心动画宝石”系列的即将上市的条目中详细介绍它可以用于的所有细节。

动画

更重要的是,对Core Animation的实际动画API进行了更改,其中有许多变体CAAnimation。许多开发人员认为这种类型的动画比UIKit的内置动画API更难以使用,即使它们提供了更多的功能和控制,但他们在Swift中并没有真正感受到“在家” - 直到现在。

就像Core Animation的其他部分现在已经为Swift完全注释一样,动画现在使用强类型选项,既可以用于动画填充图层属性的方式,也可以用于引用计时功能:

let animation = CABasicAnimation(keyPath: #keyPath(CALayer.transform))
animation.fillMode = .forwards
animation.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
复制代码

使用#keyPath编译器命令,我们甚至可以获取动画API的最终字符串类型部分 - 我们想要设置动画的关键路径 - 并将其转换为类型安全。看看这个完整的例子,我们正在创建一个用于旋转图层的定制定时动画,很难说我们实际上是在使用旧的基于Objective-C和C的API:

let animation = CABasicAnimation(keyPath: #keyPath(CALayer.transform))
animation.fillMode = .forwards
animation.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
animation.duration = 5
animation.fromValue = layer.transform
animation.toValue = CATransform3DMakeRotation(.pi, 0, 0, 1)
layer.add(animation, forKey: "rotate")
复制代码

在Core Animation的其他类型和类中也可以找到适用于CAShapeLayerCAAnimation朋友的相同类型的调整和改进。例如,CATextLayer现在使用枚举进行对齐和截断属性,CAConstraint现在使用can 定义图层约束也可以以类型安全的方式完成。

结论

在Swift中使用Core Animations时添加这些修改可能看起来微不足道并且一开始并不重要,但它确实有帮助 - 无论是在保持我们的源代码优秀,安全和干净方面,还在使Core Animation这样的框架更易于访问到新一代Swift开发人员。

我很高兴Apple回过头来注释这些基于Objective-C和C的API,而不是将它们扔掉并“从头开始”重写它们。核心动画是一个非常强大和灵活的工具,使它看起来不像一个低级无法访问的框架,更像是一个易于使用的所有Swift开发人员,我认为是一个巨大的胜利。

小编这里有大量的书籍和面试资料哦(点击下载)

原文地址

转载于:https://juejin.im/post/5d3c099d51882541175c158e

一个更Swifty核心动画相关推荐

  1. 如何用Swift实现一个好玩的弹性动画

    本文由CocoaChina译者浅夏@旧时光翻译自Raywenderlich 原文:How To Create an Elastic Animation with Swift 每个像样的iOS应用程序一 ...

  2. iOS开发CoreAnimation解读之一——初识CoreAnimation核心动画编程

    iOS开发CoreAnimation解读之一--初识CoreAnimation核心动画编程 一.引言 二.初识CoreAnimation 三.锚点对几何属性的影响 四.Layer与View之间的关系 ...

  3. Core Animation 文档翻译 (第二篇)—核心动画基础要素

    前言 核心动画为我们APP内Views动画和其他可视化元素动画提供了综合性的实现体系.核心动画不是我们APP内Views的替代品,相反,它是一种结合Views来提供更好性能和支持Content动画的技 ...

  4. 核心动画——CAAnimation

    1.什么是核心动画? 核心动画--CAAnimation,采用了CAMediaTiming协议,可以调整时间,包括持续时间,速度,重复次数;采用了CAAction协议,可以通过响应动作的方式来显示动画 ...

  5. iOS核心动画以及UIView动画的介绍

    我们看到很多App带有绚丽狂拽的特效,别出心裁的控件设计,很大程度上提高了用户体验,在增加了实用性的同时,也赋予了app无限的生命力.这些华丽的效果很多都是基于iOS的核心动画原理实现的,本文介绍一些 ...

  6. iOS_核心动画(二)

    目 录: 一.Core Animation开发步骤 二.Core Animation的继承结构 三.CAAnimation常用的属性 四.CAPropertyAnimation(属性动画) 五.CAB ...

  7. iOS动画篇:核心动画

    1.什么是核心动画 Core Animation(核心动画)是一组功能强大.效果华丽的动画API,无论在iOS系统或者在你开发的App中,都有大量应用. 核心动画所在的位置如下图所示: 可以看到,核心 ...

  8. iOS核心动画--浅析三个动画的实现

    点击打开链接 http://www.jianshu.com/p/272aa1f26c62 动画和绘图是iOS开发中非常重要的部分.我们要实现一个动效,首先就是动画解析,分析动画的路径,然后再考虑具体的 ...

  9. 核心动画(8)显式动画

    核心动画(8)显式动画 显式动画 属性动画 基础动画 CAAnimationDelegate 关键帧动画 虚拟属性 动画组 过渡 隐式过渡 对图层树的动画 自定义动画 在动画过程中取消动画 总结 显式 ...

  10. 核心动画(14)图像IO

    核心动画(14)图像IO 图像IO 加载和潜伏 线程加载 GCD和`NSOperationQueue` 延迟解压 `CATiledLayer` 分辨率交换 缓存 `+imageNamed:`方法 自定 ...

最新文章

  1. 代码分析+原理图解——棋盘覆盖问题-分治法
  2. 推荐安装的Visual Studio Extensions
  3. java byte数组string_byte数组和String之间的转化
  4. linux安装selenium、chromedriver、Chrome浏览器、BrowserMob Proxy(代理)爬虫爬站环境安装及测试实例
  5. java并发-多线程方面的思考
  6. spring复杂数据类型传递
  7. 网卡重启影响nfs吗_NFS性能优化 不完整介绍
  8. 跟bWAPP学WEB安全(PHP代码)--SSL(Server-Side-Include)漏洞
  9. 实践中 XunSearch(讯搜)更新索引方案对比
  10. SQL查询效率:100万数据查询只需要1秒钟
  11. AdapterView(一)
  12. 时频分析方法及其在EEG脑电中的应用
  13. 非计算机专业怎么准备蓝桥杯,大三接触算法,用寒假时间准备蓝桥杯,如何提高成绩?...
  14. BioPython安装与入门
  15. 自定义敏感词检测器_使用转移学习创建自己的自定义对象检测器
  16. html5 做屏幕保护效果,电脑屏保制作软件如何制作屏保 及如何设置屏幕保护
  17. 云栖大会马总演讲:《未来属于善于拥抱未来的人》
  18. [V5] self的resend,JS实现
  19. 《JS修炼之道》—— 读后总结
  20. 带你了解2021世界人工智能大会上的AI新趋势

热门文章

  1. “换个江湖再见”阿里巴巴20周年年会直击:岁月很暖,未来很酷。
  2. 飞信登录时SIPC认证失败解决
  3. 各种符号的英文读法读音单词
  4. Python中向列表添加元素的方法
  5. 使用c++实现各种进制之间的转换
  6. 使用L-Edit画环形光栅
  7. HBuilder打包
  8. 苹果手机怎么关闭爱奇艺自动续费_爱奇艺回应涨价为用户创造优质服务,小编建议用户先关闭自动续费...
  9. android go官方下载,GoFIT下载
  10. JavaScript学习记录十六