【问题标题】:Doing completely custom animations with Core Animation - performance使用 Core Animation 做完全自定义的动画 - 性能
【发布时间】:2017-05-28 22:12:23
【问题描述】:

文章

https://www.objc.io/issues/12-animations/animating-custom-layer-properties/

关于使用 Core Animation 制作完全自定义的动画有这样的说法:

假设我们想要使用 Core Graphics 来绘制时钟,而不是使用单独的层来实现我们的钟面。 (一般而言,这将具有较差的性能,但可以想象,我们可能想要实现的复杂绘图操作很难使用普通的图层属性和变换来复制。)我们将如何这样做?

换句话说,我们使用 CG 手动绘制 CA 的每一帧,因为我们的动画过于复杂,无法仅使用内置的 CALayer 功能来完成。

问题是关于性能不佳

  1. 既然 CG 在 CPU 上运行,这不会有阻塞主线程的风险吗?
  2. 这是否是使用 SpriteKit 而不是 CA 的原因(因为 SpriteKit 在 GPU 上运行并且不会阻塞主线程)?

【问题讨论】:

  • 你有没有听过一句老话,“如果我有更多的时间,我会少写”?我刚刚看到这个,需要一些时间以简单、优雅和简洁的方式解释所有内容。不过,我确实理解这个过程,选择框架是一项严肃的工作,不应该隐藏/模糊/不透明。苹果在解释这些东西如何在他们的任务、才能和解决方法的层次结构中做了一个糟糕的工作......我的意思是......这些是他们自己的框架,他们几乎没有花一个纪录片来写任何关于他们的凝聚力和冲突。
  • 这是一个巨大的耻辱,因为每个框架(及其部分和部分)都是独一无二的,并且在某种程度上与其他部分、部分和整体相辅相成。很自然,这完全取决于项目任何部分的活动目标,以及整个项目。但这些都是可以做出的决定,而且决策过程可以是透明的。另外……这些都是真正的重大决定,应该可以在开始之前以知情和自信的方式以高度知情、合理、合理、合理和明智的方式做出。
  • 所以...给我一点,创作一些(希望)有一些见解的东西,如果不是智慧的话。
  • 深思熟虑,您的第二个问题...您是否假设 CA 需要 CG?
  • 啊。好的。我将不得不解释 CA 的全部功能。它比你想象的要好得多。可能是 Apple 最好的产品。

标签: ios cocoa-touch sprite-kit core-graphics core-animation


【解决方案1】:
  1. 是的。对于你的第一个问题。使用 Core Graphics(Quartz 或 CG)绘图受 CPU 限制,会大大减慢应用程序的各个方面......完成绘图。即使这小于每秒 1 帧。

您在输出大 PDF 时会看到这一点。 Core Graphics 以牺牲所有其他活动为代价忙于渲染,将输出质量置于所有其他因素之上。部分原因是它起源于 PostScript,以打印输出为目标,其中质量是主要目标,还因为它仍然是一个以质量为中心的图像创建框架,而不是动画。

  1. SpriteKit 与 CA 的争论比 SpriteKit/CA 与 CG 的争论要微妙得多

了解这些框架的不同优先级、功能和性能特征揭示了如何最好地结合使用它们,以及何时以排他性方式选择它们。

在 CA 和 CG 的情况下,命名约定传达的依赖性和互操作性不一定是真实的、必要的或存在的,但它们可以有效地组合在一起,而且非常好。这只是一种平衡行为,因为他们做的一些事情非常不同。

CG = 核心图形

CA = 核心动画

Core Animation 就像它在锡上所说的那样:非常擅长制作动画。但它也有惊人的创意内容创建工具。可能会让您感到惊讶的事情,因为它不是一个经常被提及的框架。它的许多关键功能都被使用它们的 UIKit 包装器所掩盖。

您链接到的文章完全避免讨论 Core Animation 的内容创建工具,这些工具不是半成品,而且非常好。特别是对于动画框架。您可以完全在 Core Animation 中制作所需的所有组件和完美的时钟动画,而无需使用任何较慢的 Core Graphics 绘图。我不确定为什么那篇文章没有说明这些功能。

在核心动画内容创建层上,这里有两个:

CAShapeLayer 可以制作和动画任何形状或形状组合的绘图。 CATextLayer 完全支持 NSAttributedString,以及它的所有属性,也支持它们的动画。

将 Core Animation 想象成受 Flash 和 QuickTime 启发的、封闭源代码、平台特定的 API,用于从头开始创建高性能动画和视觉交互性。

  • 作为绘图和内容创建框架,CALayers 不具备 Core Graphics 的所有功能。但它们也远没有像 SpriteKit 那样受到限制。

  • 作为一个动画和交互框架,Core Animation 是一个比 Sprite Kit 更好且(在许多方面)基于图形、动画和事件的游戏引擎,没有 SpriteKit 中包含的一些更具体的附加组件.

CALayers 不仅仅是简单的东西。他们能够绘制内容,也可以掩盖它。然后以各种奇妙的方式高度动画化,包括伪 3D 旋转空间,以及透视变形。

Core Animation 中缺少,但在 SpriteKit 中:

  1. 声音:在 SK 中播放声音有两种不同的方式,在 CA 中没有滚动方式播放声音
  2. 游戏循环:虽然 SK 针对事件进行了优化,但它也有一个围绕它构建的游戏循环
  3. 物理:您需要使用 UIKit Dynamics 和核心动画层来获得物理
  4. 图像打包:需要自己处理纹理及其解包
  5. 视觉场景编辑器:可以说损失不大。从设计师的角度说
  6. Visual Particle Editor:这更像是一种损失。没有一个很难做出好的效果
  7. SKActions:但 CA 同时具有隐式/显式动画和/或 CAKeyFrameAnimation

使用 SpriteKit 的彻底否定:

  1. 不能很好地与 UIKit 及其出色的布局功能配合使用
  2. 特殊的错误,因为它提供了最少的(看似)资源和错误测试
  3. 非常小的用户社区,提供少量的大多数琐碎的问答支持
  4. Apple 几乎不提供支持,他们的论坛是一片悲伤的荒地
  5. 文档很糟糕,大多已过时和/或毫无意义
  6. 没有游戏引擎常见的无数示例和演示
  7. 通过渗透学习了解工作流程、范式和流程
  8. 场景编辑器运行缓慢、设计不佳、营养不良且不适合 Xcode
  9. 不支持标签和其他文本呈现需求的 NSAttributedString

添加第二部分的答案后,我将删除一些历史废话:

核心图形历史的快速回顾,带有相关的转折……

Mac 上的 PostScript 在很大程度上促成了桌面出版的诞生,Mac 在它协助创建的新的和新兴的设计和创意计算市场中取得了成功。这些市场让苹果保持活力,而 IBM/英特尔/微软则攻击注重成本和兼容性的“生产力”和企业市场。数字创意人士现在对蒂姆·库克的苹果公司在榨取 iPhone 摇钱树时感到沮丧和愤怒,却没有承认、尊重、关心甚至跟上现代桌面创意的能力。*

选择框架时要考虑的其他一些运球:

凭借消费者和创意计算历史上最大的现金储备,他们也未能在创建创意工具方面进行创新。这感觉(和看起来)很像对 Apple 核心价值观/传统的背叛,以及那些在过去几十年里致力于学习和使用以 Apple 为中心的创意工具的人的精力和热情。无可争辩的是,创意“酷”帮助苹果“酷”,提供了对 iPod 的期望和采用,从而导致了 iPhone 和 iPad。

由于对 iPhone 的不圆滑和不优雅的现金抢夺重点,该品牌的一些光彩肯定正在下降。令人担忧的一个简单原因是影响这些类型的决策:SpriteKit 的采用率极低。苹果可能会决定削减其已经精干的开发团队的成本以获取更大的利润,因为在新苹果中,利润似乎压倒了所有其他动机。与 iPhone 带来的利润增长相比,在框架和软件开发资源方面的创新支出远没有成比例。

Apple 没有表现出理解需求的迹象,也没有表现出积极热情地投资于使新框架尽可能好或稳定的迹象。验证并因此吸引开发人员使用新框架需要 Apple 似乎不愿意做出的透明努力。苹果似乎对学习、采用和使用新框架所期望和所需的时间和精力不屑一顾。他们完全假定开发人员会冒险采用 Apple 唯一的技术,这些技术可能会因一时兴起而被关闭。

Sprite Kit 和 Scene Kit 的酝酿期长得离谱,并且在之前的版本中出现了几个惊人的错误。再加上非常糟糕的开发人员沟通以及对编码人员信心和采用率增长的明显缺乏关注,这导致采用率确实很低。

如果没有大力采用,Apple 可能会决定放弃 SpriteKit,而不是让它像以前那样跛行。

可以公平地说,cocos2D-X 的持续成功是苹果未能将 SpriteKit 打造为它可以和应该成为的直接结果。完全未能及时和周到地支持、沟通、管理和更新其问题,这导致了避免使用 SpriteKit 的强烈愿望,以及开发人员的不确定性和恐惧感。

由于他们对开发人才的预算几乎是无限的,这种事情应该会成为苹果尴尬和批评的根源,并引发对其其他“计划”和涉足“创新”的严格审查。由于我不明白的原因,批判性地思考 Apple 做什么和不做什么,以及这些选择所产生的影响和影响,并不是一件好事。

我认为公平地说,他们对内部软件开发人员的聘用和软件输出质量在硬件销售、应用商店收入、覆盖面和市场影响力方面与 iOS 平台的增长相去甚远。这将很快产生比 Sprite Kit 的用户群和 SceneKit 几乎不存在的用户群更明显的后果。

【讨论】:

  • 有趣的想法。不要删除任何这些。保留它,即使添加了第 2 部分。这些都是非常感谢的意见!
  • 美丽的答案。谢谢你。我现在确信 CA 值得掌握。
  • 我还没有接触到 CA 的优点。掌握它,您将了解有关 Apple 应用程序和 SpriteKit 游戏是如何“在后台”制作的所有知识。 CA 是 UIKit 的支持层,是 SpriteKit 的包装内脏。它是 Apple 框架的瑰宝。由于每个人都忙于制作 TODO 列表以向 iOS 推广自己的咨询编程……有点像过去的网页设计师。如果 Apple 有任何智慧,他们会创建一个核心社区框架来弥补猖獗的贪婪和自私。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多