大家都知道扫描仪的工作原理,对吧? 对... 😳?
它有点复杂,但本质上,过程是:
就是这样。很简单 🤓
如果在扫描进行时移动内容,会发生有趣的事情。 scanEffect
扩展允许你创建这样的效果。
这是一个 可能的实现。
通常,图像处理由 GPU 处理。 Shader 函数的任务是处理 scanArea.height * scanArea.width
个像素。 在 shader 内部实现整个效果是很常见的,但是,如果你想注入一些交互性,或者以任何方式从外部影响 shader 的输出,你必须能够在 CPU 上也做一些工作。 scanEffect
通过公开 ScanEffectContentDisplacementCalculator
来实现这一点,它允许你计算每帧扫描区域每行的内容位移。 所以过程是:
sceneEffect
modifier 添加到你的 View
ScanEffectContentDisplacementCalculator
计算内容位移因此,渲染一帧时,会在 CPU 上发生 scanArea.height
次对 displacedContentPosition.calculate
的调用。 很多吗? 没那么多? 视情况而定。 如果你想渲染动画,它可能会变得非常繁重,所以要小心!
作为 Swift Package 使用。
我主要为了自己制作它,作为我最近的 SwiftUI
+ Metal
研究的练习。
随意使用它(嗯,它不一定是生产就绪的 - 这取决于用例),随意贡献(修复问题,分享想法),随时在 @czajnikowski 上联系我 👋