我的初步建议是:降低你对框架交互和它们之间关系构建的期望。请查看CAShapeLayer,看看它是否可以完成你试图使用SKShapeNode和着色器实现的功能。CAShapeLayers有一个“shouldRasterize”功能,您可以应用Core Image过滤器等内容,这可能会使您接近所需的结果,而无需使用SKViews、SKShapeNode和SKShaders。
你所面临的问题是苹果新API和框架在质量和性能方面期望过高,以及它们之间的互动和包容能力。
这不是你的错。
苹果早就掌握了展示和销售技巧。
很长一段时间里,这些技巧只用于实体产品发布——推销人们购买的设备。
大约在已故伟大的乔布斯先生(愿他安息)病重和去世时,公司正在进行一个转型,积极推广快速开发和早期发布软件到应用商店。
其中大部分是为了对抗Android和谷歌。可能有一些共识(可能是公司现在领导的供应商关注渠道之间的共识),尽可能多地将应用程序放入商店是打败Android的方法。
为此,iOS 7被创建出来,包括UICollectionViews、AutoLayout和各种其他“神奇”的好东西,旨在消除大多数应用程序创建中设计和设计师的需要(和关注)。
这些设施给人留下了印象,认为API可以做任何事情,几乎不需要考虑设计,甚至不需要考虑技术设计。
所以开发人员进入框架时,他们充满希望、乐观地认为只要使用可用的框架和API,通过他们对WWDC视频和其他苹果推广材料的理解,就可以实现任何他们构思的东西。
不幸的是,上述的销售手法和表演意味着你认为可能的事情实际上仅限于你展示的字面演示。框架之间交织关系和成功的暗示和建议潜在功能仅仅是“可能的潜在未来功能”而已。
除了字面演示之外,几乎所有的东西都是有缺陷的,或者在某种程度上受到严重限制和性能不佳。在某些情况下,甚至展示的内容也会在后续出现故障或无法发布。
因此,如果您花时间想象像将SKView结合在UICollectionView中这样的事情,并认为这种关系应该可以工作,那么这个假设就是您的问题。
这个问题会变得更糟,当你开始考虑SKShapeNodes和Shaders时,它们在SceneKit中都有已知的问题。显然,你已经发现了问题所在,即UICollectionView中的SKViews性能不佳。这是第一个问题。你将在稍后从SKShapeNodes和着色器中获得更多的性能问题,然后SKShapeNode的不可变性也会成为你动画的问题。
这并不是一个错误的假设,你被引导相信框架的模块化是一件事,并且是iOS巨大框架的一个重要特性。
然而,这些都是早期的阶段,没有提到。Sprite Kit在iOS 9中基本上是有问题的,你可以在这里阅读更多关于其许多问题的信息:
https://forums.developer.apple.com/thread/14487
这里:
https://forums.developer.apple.com/thread/20758
这里:
https://forums.developer.apple.com/thread/17463
据我所知,尽管有关Scene Kit在iOS 9中的许多问题的噪音不断,但至今没有正式的沟通涉及这些问题的原因和/或性质。
其中一个困扰许多人的巨大问题是,在iOS 9中使用UIKit和SKViews(无论它们如何相互关联)会导致严重的性能问题。目前似乎除了将这两个框架分开之外,没有明显的解决方法。