总结,在iOS中,如何拥有一个修改其后所有视图像素的视图。
假设您有一个视图以及所有视图,但让我们考虑一个碰巧只是一些色块的集合视图:
假设我们在顶部添加了一个视图,即 CleverView ,它只是阻止了该视图(因此,白色-微不足道),甚至在该层中“切了一个洞”(相对容易做到,google )。
到目前为止没有问题:所以这里的CleverView只是一个白色正方形:
但是,如果我们想要这样做:
CleverView会更改其下方的所有饱和度,
或者也许是这样
CleverView正在更改色相或其下方的任何内容。
请注意,在示例中,它是以像素方式工作的,并不是(只是)标记每个收集视图单元格来更改所有单元格颜色。
因此,理想情况下,CleverView可以对碰巧在其后面的所有内容执行此操作(即,它涵盖或部分涵盖的任何视图,因此,集合视图示例只是“许多视图”。)
自然,下面的东西和CleverView的形状都可以实时地动画,移动。
有没有办法在iOS中完成?
(在那个特定的示例中,我要做的只是拥有两个集合视图:底部的视图和顶部的视图具有新的颜色值。只需小心地剪辑顶部的视图即可达到这种效果。但是显然并不像实际上“修改其后所有像素的值”的视图那样聪明。)
{也请注意,很明显,您基本上只能制作一个屏幕快照,修改该图像并显示它;并不是一个很好的解决方案。}
答案 0 :(得分:1)
CALayer
有一个属性backgroundFilters
,您通常可以在其中添加一个CIFilter
来完成这项工作。但是,文档指出
特殊注意事项该属性在以下图层中不受支持 iOS。
这很烦人,但这就是我们所拥有的。可能是出于性能方面的考虑。
我建议您研究SceneKit
,那里的原语与CoreAnimation
非常相似,也可以用CAAnimation
进行动画处理,但是提供了高级工具来配置和控制渲染。
例如,SCNNode
具有filters
:https://developer.apple.com/documentation/scenekit/scnnode/1407949-filters?language=objc