总结,在 iOS 中如何拥有一个 View ,修改其背后所有 View 的像素。
假设你有一个 View ,任何 View ,但让我们考虑一个恰好只是一些颜色 block 的 Collection View :
假设我们在顶部添加了一个 View ,CleverView,它要么只是阻止该 View (因此,白色 - 微不足道),要么甚至在该层“切开一个洞”(相对容易做到,谷歌).
到目前为止没问题:这里的 CleverView 只是一个白色方 block :
但是如果我们想这样做怎么办:
CleverView 正在改变它下面的所有饱和度,
或者也许是这样的:
CleverView 正在改变色调或其下方的任何内容。
请注意,在示例中它以像素方式工作,它不是(“只是”)标记每个 Collection View 单元格以更改所有单元格颜色。
因此,理想情况下,CleverView 会对其背后发生的任何事情执行此操作(即,它涵盖或部分涵盖的任何 View ,因此 Collection View 示例只是“许多 View ”)。
当然,下面的东西和 CleverView 的形状都可以实时动画、移动。
有什么方法可以在 iOS 中完成吗?
(在那个具体的例子中,我所做的只是,有两个 Collection View :底部的和顶部的有新的颜色值。只需小心地剪掉顶部的就可以达到效果。但显然那是不像实际“修改其后面所有像素的值”的 View 那样聪明。)
{另请注意,显然,您基本上可以制作一个屏幕截图,修改该图像并显示它;这不是一个很好的解决方案。
最佳答案
CALayer
有一个属性 backgroundFilters
,您通常可以在其中添加一个 CIFilter
来完成这项工作。但是,文档指出
Special Considerations This property is not supported on layers in iOS.
这很烦人,但这就是我们所拥有的。可能是出于性能方面的考虑。
我建议查看 SceneKit
,那里的基元与 CoreAnimation
非常相似,也可以使用 CAAnimation
进行动画处理,但提供了高级工具配置和控制渲染的更多方面。
例如,SCNNode
有过滤器
:https://developer.apple.com/documentation/scenekit/scnnode/1407949-filters?language=objc
关于ios - CALayer 或其他技术来实际修改后面图层的颜色,就像剪裁一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57756760/