这篇文章
https://www.objc.io/issues/12-animations/animating-custom-layer-properties/
这有关于使用Core Animation完成自定义动画的说法:
假设我们不是使用单独的层实现我们的钟面,而是使用Core Graphics绘制时钟.(一般来说,这会有较差的性能,但可以想象我们可能想要实现的复杂绘图操作难以使用普通的图层属性和变换进行复制.)我们如何做到这一点?
换句话说,我们使用CG手动绘制CA的每个帧,因为我们的动画太复杂,只能使用内置的CALayer功能.
问题是关于劣质表现.
由于CG在CPU上运行,这不会有阻塞主线程的风险吗?
这可能是使用SpriteKit而不是CA的原因(因为SpriteKit在GPU上运行并且不会阻塞主线程)?
Confused.. 13
是.对你的第一个问题.使用核心图形(Quartz或CG)进行绘制是受CPU限制的,并且会极大地降低应用程序的各个方面....如果准备,绘图,合成和演示占用帧时间,您的应用程序将明显停滞并将其帧速率降低到完成绘图.即使这小于每秒1帧.
输出大型PDF时会看到这一点.核心图形繁忙地以牺牲所有其他活动为代价,有利于输出质量而不是所有其他因素.部分原因是因为它的起源是PostScript,目标是打印输出,质量是主要目标,但也因为它仍然是创建图像的质量中心框架,而不是动画.
与SpriteKit/CA和CG相比,SpriteKit与CA相比是一个更加微妙的论点
了解这些框架的不同优先级,功能和性能特征揭示了如何最好地一起使用它们,以及何时在排他性中选择它们.
在CA和CG的情况下,命名约定传达的依赖性和互操作性不一定是真实的,必要的,或者在那里,但它们可以有效地组合,并且非常好.这只是一种平衡行为,因为他们做的事情有很大不同.
CG =核心图形
CA =核心动画
核心动画就像它所说的那样:非常擅长制作动画.但它也拥有惊人的创意内容创作工具.可能会让你感到惊讶的事情,因为它不是一个很好的框架.它的许多关键功能都被使用它们的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中:
声音:有两种不同的方式可以在SK中播放声音,没有在没有滚动自己的情况下在CA中播放声音
游戏循环:虽然SK针对事件进行了优化,但它也有一个游戏循环
物理学:你需要使用带有核心动画层的UIKit Dynamics来获得物理学
图像打包:需要对纹理及其解包进行自己的文件处理
视觉场景编辑器:可以说不是很大的损失.从设计师的角度说
视觉粒子编辑器:这更令人失望.没有人就更难做出好的效果
SKActions:但CA同时具有隐式/显式动画和/或CAKeyFrameAnimation
使用SpriteKit的直接否定:
当你想要UIKit及其出色的布局能力时,它不能很好地发挥作用
奇怪的错误,因为它给出了最小的(看似)资源和错误测试
非常小的用户社区,提供一小部分简单的Q&A支持
几乎没有人提到苹果的支持,他们的论坛是悲伤的荒地
文件很糟糕,大多过时和/或毫无意义
游戏引擎常见的无数例子和演示都没有
通过渗透学习了解工作流程,范例和过程
场景编辑器速度慢,设计不良,营养不良,在Xcode中表现不佳
没有NSAttributedString支持标签和其他文本演示需求
一旦添加第二部分的答案,我将删除一些历史性的guff:
快速回顾核心图形历史,有一个相关的转折......
Mac上的PostScript主要负责桌面出版,而Mac在设计和创意计算市场的新兴和新兴领域取得了成功,并协助创建.这些市场使苹果保持活力,而IBM /英特尔/微软则抨击成本和兼容性意识的"生产力"和企业市场.数字创意人员现在对蒂姆库克的苹果公司感到沮丧和愤怒,因为他们没有承认,尊重,关心甚至跟上现代桌面创意的能力.
在选择框架时要考虑其他一些运球:
凭借消费者和创意计算历史上最大的现金储备,他们也未能在创造创造性工具方面进行创新.这感觉(并且看起来)就像背叛了Apple的核心价值观/传统,以及那些致力于在精益的几十年中学习和使用Apple中心创意工具的人的精力和热情.无可争辩的是,"酷"的创造力帮助Apple变得"酷",提供了通向iPhone和iPad的iPod的期望和采用.
由于iPhone上没有机智和优雅的现金抢夺重点,该品牌的一些光彩肯定会下降.令人担心的一个简单原因是影响这些类型的决策:SpriteKit的使用率很低.苹果公司可能决定降低其已经精益的开发团队的成本以获取更大的利润,因为看起来利润正在超越新苹果的所有其他动机.与iPhone的利润增长相比,框架和软件开发资源的创新支出几乎没有.
Apple没有表现出理解需求的迹象,也没有希望积极而热情地投资于使新框架尽可能好或稳定.验证并因此吸引开发人员使用新框架需要苹果似乎不愿意做出透明的努力.Apple似乎对学习,采用和使用新框架所需的时间和精力不屑一顾.在他们的期望中完全推测开发商将承担采用Apple技术的风险,这些技术可能会因寻求利润而被关闭.
Sprite Kit和Scene Kit正在经历一个荒谬的长期妊娠期,以及之前版本中的几个showstopper错误.与非常糟糕的开发人员沟通以及对编码人员信心和采用的增长完全缺乏明显关注相结合,这导致了真正低迷的采用率.
如果没有强有力的采用,Apple可能决定放弃SpriteKit,而不是让它一如既往地跛行.
可以说,cocos2D-X的持续成功是苹果公司未能及时制造SpriteKit的直接结果.完全无法以及时和体贴的方式支持,沟通,管理和更新其问题,这已经产生了强烈的愿望,即避免使用SpriteKit,以及开发人员的不确定性和惶恐之情.
由于他们对开发人才的预算几乎无限,这种事情应该成为苹果尴尬和批评的根源,并激发他们对其他"倡议"的严格审查,并涉及"创新".由于我不理解的原因,批判性思考Apple做了什么和不做什么,以及这些选择产生的影响和影响,都不是完成的事情.
我认为公平地说,他们雇用内部软件开发人员和软件输出质量远远不能与iOS平台在硬件销售,应用程序商店收入,覆盖面和市场影响力方面的增长相匹配.这很快会比Sprite Kit的瘦骨用户群和几乎不存在的SceneKit使用更明显.
是.对你的第一个问题.使用核心图形(Quartz或CG)进行绘制是受CPU限制的,并且会极大地降低应用程序的各个方面....如果准备,绘图,合成和演示占用帧时间,您的应用程序将明显停滞并将其帧速率降低到完成绘图.即使这小于每秒1帧.
输出大型PDF时会看到这一点.核心图形繁忙地以牺牲所有其他活动为代价,有利于输出质量而不是所有其他因素.部分原因是因为它的起源是PostScript,目标是打印输出,质量是主要目标,但也因为它仍然是创建图像的质量中心框架,而不是动画.
与SpriteKit/CA和CG相比,SpriteKit与CA相比是一个更加微妙的论点
了解这些框架的不同优先级,功能和性能特征揭示了如何最好地一起使用它们,以及何时在排他性中选择它们.
在CA和CG的情况下,命名约定传达的依赖性和互操作性不一定是真实的,必要的,或者在那里,但它们可以有效地组合,并且非常好.这只是一种平衡行为,因为他们做的事情有很大不同.
CG =核心图形
CA =核心动画
核心动画就像它所说的那样:非常擅长制作动画.但它也拥有惊人的创意内容创作工具.可能会让你感到惊讶的事情,因为它不是一个很好的框架.它的许多关键功能都被使用它们的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中:
声音:有两种不同的方式可以在SK中播放声音,没有在没有滚动自己的情况下在CA中播放声音
游戏循环:虽然SK针对事件进行了优化,但它也有一个游戏循环
物理学:你需要使用带有核心动画层的UIKit Dynamics来获得物理学
图像打包:需要对纹理及其解包进行自己的文件处理
视觉场景编辑器:可以说不是很大的损失.从设计师的角度说
视觉粒子编辑器:这更令人失望.没有人就更难做出好的效果
SKActions:但CA同时具有隐式/显式动画和/或CAKeyFrameAnimation
使用SpriteKit的直接否定:
当你想要UIKit及其出色的布局能力时,它不能很好地发挥作用
奇怪的错误,因为它给出了最小的(看似)资源和错误测试
非常小的用户社区,提供一小部分简单的Q&A支持
几乎没有人提到苹果的支持,他们的论坛是悲伤的荒地
文件很糟糕,大多过时和/或毫无意义
游戏引擎常见的无数例子和演示都没有
通过渗透学习了解工作流程,范例和过程
场景编辑器速度慢,设计不良,营养不良,在Xcode中表现不佳
没有NSAttributedString支持标签和其他文本演示需求
一旦添加第二部分的答案,我将删除一些历史性的guff:
快速回顾核心图形历史,有一个相关的转折......
Mac上的PostScript主要负责桌面出版,而Mac在设计和创意计算市场的新兴和新兴领域取得了成功,并协助创建.这些市场使苹果保持活力,而IBM /英特尔/微软则抨击成本和兼容性意识的"生产力"和企业市场.数字创意人员现在对蒂姆库克的苹果公司感到沮丧和愤怒,因为他们没有承认,尊重,关心甚至跟上现代桌面创意的能力.
在选择框架时要考虑其他一些运球:
凭借消费者和创意计算历史上最大的现金储备,他们也未能在创造创造性工具方面进行创新.这感觉(并且看起来)就像背叛了Apple的核心价值观/传统,以及那些致力于在精益的几十年中学习和使用Apple中心创意工具的人的精力和热情.无可争辩的是,"酷"的创造力帮助Apple变得"酷",提供了通向iPhone和iPad的iPod的期望和采用.
由于iPhone上没有机智和优雅的现金抢夺重点,该品牌的一些光彩肯定会下降.令人担心的一个简单原因是影响这些类型的决策:SpriteKit的使用率很低.苹果公司可能决定降低其已经精益的开发团队的成本以获取更大的利润,因为看起来利润正在超越新苹果的所有其他动机.与iPhone的利润增长相比,框架和软件开发资源的创新支出几乎没有.
Apple没有表现出理解需求的迹象,也没有希望积极而热情地投资于使新框架尽可能好或稳定.验证并因此吸引开发人员使用新框架需要苹果似乎不愿意做出透明的努力.Apple似乎对学习,采用和使用新框架所需的时间和精力不屑一顾.在他们的期望中完全推测开发商将承担采用Apple技术的风险,这些技术可能会因寻求利润而被关闭.
Sprite Kit和Scene Kit正在经历一个荒谬的长期妊娠期,以及之前版本中的几个showstopper错误.与非常糟糕的开发人员沟通以及对编码人员信心和采用的增长完全缺乏明显关注相结合,这导致了真正低迷的采用率.
如果没有强有力的采用,Apple可能决定放弃SpriteKit,而不是让它一如既往地跛行.
可以说,cocos2D-X的持续成功是苹果公司未能及时制造SpriteKit的直接结果.完全无法以及时和体贴的方式支持,沟通,管理和更新其问题,这已经产生了强烈的愿望,即避免使用SpriteKit,以及开发人员的不确定性和惶恐之情.
由于他们对开发人才的预算几乎无限,这种事情应该成为苹果尴尬和批评的根源,并激发他们对其他"倡议"的严格审查,并涉及"创新".由于我不理解的原因,批判性思考Apple做了什么和不做什么,以及这些选择产生的影响和影响,都不是完成的事情.
我认为公平地说,他们雇用内部软件开发人员和软件输出质量远远不能与iOS平台在硬件销售,应用程序商店收入,覆盖面和市场影响力方面的增长相匹配.这很快会比Sprite Kit的瘦骨用户群和几乎不存在的SceneKit使用更明显.